族谱网 头条 人物百科

GNU调试器

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:756
转发:0
评论:0
历史GNUDebugger最初是在1988年由理查德·马修·斯托曼(RichardStallman,自由软件的精神领袖)所撰写,之后以GNU通用公共许可证(GNUGeneralPublicLicense,GNUGPL)的授权方式将软件发布,因此GNUDebugger是一套自由软件。发布后的1990年-1993年间则由任职于CygnusSolutions公司的约翰·吉尔摩(JohnGilmore(英语:JohnGilmore(advocate)))负责后续的软件维护工作。技术细节特点GDB具备各种侦错功效,能针对计算机程序的运行进行追踪与警告,使用GDB的除错人员可以监督及修改程序的内部变量值,甚至监督与修改独立于主程序运作外,以独立个体类型调用(调用使用)的函数。GDB能为多种不同处理器架构上运行的软件进行侦错,这些处理器架构包括:DEC/COMPAQ/HP的Alpha、ARM的ARM、H...

历史

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等架构的处理器也都具备。

远程侦错

GNU调试器

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)的功效来协助远程侦错。

现有限制

GNU调试器

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进行除错)

外部链接

GNU调试器

自由软件主题首页

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) (英文)


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· GNU
历史理查·斯托曼,GNU项目的创建者GNU操作系统起源于GNU项目,由理查·斯托曼在麻省理工学院人工智能实验室发起,希望发展出一套完整的开放源代码操作系统来替换Unix,计划中的操作系统,名为GNU。1983年9月27日,理查·斯托曼在net.unix-wizards和net.usoft新闻组中公布这项计划。。理查德·斯托曼通过使用变化单词的各种手法来选择名称,包括曲目TheGnu(英语:TheGnu)。斯托曼的目标是成立一个完全免费操作系统,他希望计算机用户是能够“免费使用”的。因为在20世纪60年代和70年代-大多数人都能免费学习软件的源代码,自由地与他人分享的软件,可自由修改软件的行为,免费发布的软件的修改后的版本。这种理念,在1985年3月出版的GNU宣言崭露无遗。1984年1月5日,正式开始开发软件,为了防止这些软件将来可能被主张所有权,影响到自由软件的发展,斯托曼辞去了在实验室...
· GNU计划
简历1985年,理查德·斯托曼创立了自由软件基金会来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被RedHat兼并的CygnusSolutions。到了1990年,GNU计划已经开发出的软件包括了一个功能强大的文字编辑器Emacs、C语言编译器GCC以及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件,就是操作系统的内核(称为HURD)。1991年,林纳斯·托瓦兹编写出了与UNIX兼容的Linux操作系统内核并在GPL下发布。Linux之后在网上广泛流传。1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生。许多程序员参与了Linux的开发与修改,也经常将Linux当成开发GNU计划软件的平台。...
· GNU宣言
摘要GNU宣言首先说明GNU不是Unix,然后叙述目前GNU软件系统完成的进度。理查德·斯托曼接着解释为什么要写这个软件,说明人们可以如何为这计划作出贡献,以及为什么电脑用户将会受益于该计划。接下来理查德·斯托曼举出一些其他人可能对GNU计划的质疑,并且一一解释与反驳,这些内容占了GNU宣言的大部分,同时也是自由软件的重要思想。参见GNU计划自由软件运动致爱好者的公开信
· GNU软件包列表
GNU软件包意味着什么2013年,理查德·斯托曼总结了应该普遍适用于GNU软件包的九个标准,但他同时指出,有很好的理由时也可有例外及灵活性:它应该将自己描述为一个GNU软件包它应该通过ftp.gnu.org或其他所有人都能访问的网站分发它的主页应该在GNU网站上开发人员应注意他们的软件能与其他GNU软件包协同工作文档格式应为Texinfo,或应能方便地转换到Texinfo扩展语言应使用GNUGuile,但这方面明确可以有例外不应推荐任何非自由软件,也不应将用户引导到非自由文档或非自由软件使用GNU术语,如GNU/Linux操作系统,及“自由软件”(freesoftware),而不是“开源”(opensource)维护者至少应偶尔联络,以讨论软件或修复兼容性问题基本系统GNU操作系统并没有官方的“基本系统”。GNU设计作为一个20世纪80年代Unix操作系统的替代,使用POSIX标准为指导,...
· GNU核心工具组
版本历史Coreutils的第一个版本5.0版于2003年4月4日发布,5.2稳定版于2004年2月19日发布。包含的程序列表兼容性在GNU系统中,Coreutils所含工具支持以长选项作为命令调用参数,且当环境变量POSIXLY_CORRECT未设定时支持较松弛的语法约束,如可以在一般参数之后而非之前使用选项。在这里需要注意的是,设置这一变量对BSD的同种工具组所产生的效果与GNU系统有所不同。参见Unix实用程序列表BusyBox,和Coreutils功能相似,主要为嵌入式Linux使用GNUBinutils

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信