GNU调试器
历史
GNU Debugger最初是在1988年由理查德·马修·斯托曼(Richard Stallman,自由软件的精神领袖)所撰写,之后以GNU通用公共许可证(GNU General Public License, GNU GPL)的授权方式将软件发布,因此GNU Debugger是一套自由软件。发布后的1990年-1993年间则由任职于Cygnus Solutions公司的约翰·吉尔摩( John Gilmore ( 英语 : John Gilmore (advocate) ) )负责后续的软件维护工作。
技术细节
特点
GDB具备各种侦错功效,能针对计算机程序的运行进行追踪与警告,使用GDB的除错人员可以监督及修改程序的内部变量值,甚至监督与修改独立于主程序运作外,以独立个体类型调用(调用使用)的函数。
GDB能为多种不同处理器架构上运行的软件进行侦错,这些处理器架构包括:DEC/COMPAQ/HP的Alpha、ARM的ARM、Hitachi的H8/300、IBM的System/370、System 390、Intel的X86及X86-64、IA-64"Itanium"、Motorola 68000、MIPS的MIPS、HP的PA-RISC、AIM联盟的PowerPC、Hitachi/Renesas/ST的SuperH、Sun的SPARC、DEC/COMPAQ/HP的VAX。
此外一些比较少人知的处理器也一样受GDB支持,包括:AMD的A29K、ARC的ARC、Atmel的AVR、Axis Communications的ETRAX CRIS、D10V、D30V、Fujitsu的FR-30、FR-V、Intel的i960、Renesas的M32R、Motorola的68HC11、Motorola的88000、Freescale的MCORE、MN10200、MN10300、NS32K、Stormy16、V850、以及Zilog的Z8000,此外更后续版本的GDB只会增加更多的处理器支持而不会短少。
GDB的内部已具备了依据各种支持不同处理器的指令集所编译成的模拟推演程序( Simulator ( 英语 : Instruction Set Simulator ) ),就连大众少知少用的M32R、V850等架构的处理器也都具备。
远程侦错
GDB的一大特点是:除了具备传统的本机端、近端侦错外,也可通过接线、网络的通信方式进行远程性的遥控侦错。
GDB具有一种“远程,Remote”模式,此种模式多半是在为嵌入式系统进行侦错时使用,远程操作指的是:GDB在一部机器内运行,而要进行侦错的程序是在另一部机器上运行,接着欲侦错的机器上会再加装一个名为“Stub”的小程序,该程序能够与另一端的GDB程序沟通,沟通的路径可以是两部机器间的串接式接线( Serial Cable ( 英语 : Serial Cable ) ),也可以是支持TCP/IP协议传输的各种网络,在TCP/IP网络及协议上再加搭传输GDB专有的除错操作用通信协议,如此便能进行远程侦错。
不仅GDB有远程模式,KGDB也同样具有远程模式,KGDB主要是为运行中的Linux核心进行侦错,而GDB则是主要是用在原代码的层次。运用KGDB,负责核心程序的程序员可以将核心以近似于应用程序的除错方式来侦错,包括为核心代码设置中断点(breakpoint)、让核心程序以步阶方式逐行运行以及观看变量值等。
在某些架构的处理器中,会以硬件方式提供一些侦错功用的寄存器,以及可以设置观察点(Watchpoint),观察点的功用是:当程序员指定的存储器地址被运行到或访问到时,观察点即会去触发、触动一个中断点。对此KGDB可以安装在一部传统机器上,并通过远程模式使用另一部受侦错机器上的硬件侦错功效,同样的两部机器可用各种方式进行沟通,如串接式接线、以太网等,尤其在FreeBSD操作系统上还允许使用FireWire接线,并用直接內存訪問(Direct Memory Access,DMA)的功效来协助远程侦错。
现有限制
GDB的GUI化前端程序:Insight(过去称GDBtk),图中为“堆栈浏览器”部分。
GDB运用上最明显的限制是在“用户界面”的部分,默认只有命令行接口(CLI)可用,而不具备较能亲合上手、直觉操作的图形用户界面(GUI),不过此一弱处也已经有几个前端程序为其补强,例如DDD、GDBtk/Insight以及Emacs中的“GUD 模式”等,有了这些补强后,GDB在功效使用的便利性上就能够与“集成发展环境中的侦错功效使用”相接近。
另外,有些侦错工具(软件)也被设计成能与GDB搭配使用,例如存储器泄漏(memory leak)的侦测程序。
命令行使用的示例
过程示例
以下是用GDB进行除错的一段过程示范,欲进行侦错的程序已在堆栈追踪( Stack trace ( 英语 : Stack trace ) )区内:
这个程序已处在运行阶段,之后找出这个程序中会导致运行错误的段落,然后将对应处的原代码用编辑器进行错误修订,更正完成后用GNU 编译器(GCC)重新编译并再次运行。
参考
书籍: Debugging with GDB (在此暂译成:用GDB进行除错)
外部链接
自由软件主题首页
GDB的官方网站 (英文)
GDB文件:"Debugging with GDB,用GDB进行除错"(在线HTML格式,折算成PDF格式则超过400页) (英文)
深入GDB (英文)
使用GDB进行C及C++编程语言的除错 (英文)
用来替Linux核心进行除错的GDB后端程序:KGDB (英文)
Peter Jay Salzman所撰:如何更专精、善用GDB (英文)
GDB内部结构(The Architecture of Open Source Applications, Volume II - ISBN 9781105571817) (英文)
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值