卷2:第4篇 GDB.pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
卷2 :第4章 GDB 原⽂链接:http://www .aosabook .org/en/gdb .html 作者:Stan Shebs GDB , 即GNU调试器(GNU Debugger) 。它诞⽣⾃开源软件基⾦会(Free So tware Foundation)成⽴之初的第⼀批 序,并⼀直是免费和开源软件系统中的主要成员。最 初GDB只是Unix系统上⼀个简单的源码层次的调试器,代码量不过数千⾏C代码,后 来逐步发展壮⼤,拓展到包括嵌⼊式系统在内多个平台,代码量也达到了上百万⾏。 GDB在发展,不断地满⾜着新的⽤户需求并增加新的功能。这⼀章将我们将介绍GDB 的整体内部结构,探讨⼀下GDB是如何做到这⼀点的。 4.1 ⽬标 GDB的设计⽬标是⼀个针对使⽤命令式(imperative)语⾔(例如C ,C++,Ada,Fortran等)编 写的 序的符号调试器。使⽤GDB原始命令⾏界⾯的⼀个⽰例如下: % gdb myprog [...] (gdb) break buggy_function Breakpoint 1 at 0x123 5678: file myprog.c, line 232. (gdb) run 5 92 Starting program: myprog Breakpoint 1, buggy_function (arg1= 5, arg2=92) at myprog.c:232 232 result = positive_variable * arg1 + arg2; (gdb) print positive_variable $$1 = -3 (gdb) GDB能显⽰ 序中的错误,开发者据此判断错误的类型并找到解决的⽅案。 设计GDB最需要考虑的是调试⼯具的交互性,因为⽤户在调试时提交的请求是不可预 测的。此外,GDB还需要深⼊到系统最底层,因为编译器会充分利⽤硬件的各种选项 来优化 序的性能。 GDB还要求能够调试不同编译器编译的 序(不仅仅是GNU C编译器) ,能够调试过时 编译器编译的 序,能够调试符号信息丢失、过时或错误的 序。所以,另外⼀个设 计要求是,即使 序中的数据丢失、损坏或⼲脆⽆法理解,GDB也能够继续⼯作并发 挥作⽤。 接下来的⼏章假定读者熟悉GDB基本的命令⾏使⽤⽅法。如果你还是新⼿,建议先⽤ ⼀⽤GDB并细读⼀下⼿册[SPS+00] 。 4.2 GDB 的起源 GDB 序历史悠久,早在1985年就已经存在。它的作者是Richard Stallman ,这个⼈还 编写了GCC ,GNU Emacs和其它⼀些早期的GNU软件。( 由于当时并没有软件仓库, GDB开发过 的细节已不为⼈所知。) GDB的最早的稳定版本在1988年发布,但在今天的GDB源码中已经找不到多少相似的 地⽅了,GDB被完全重写过⾄少⼀次。 令⼈惊讶的是,早期的GDB并没有太⼤的野 ⼼,后来的平台移植和功能扩展并没有包括在GDB最初的计划之中。 4.3 GDB结构框图 set print elements 80 使⽤了3个表格,第⼀个是包含了所有命令的表格,第⼆个是 包含了set选项的表格,第三个是print选项的表格,其中elements选项⽤于控制 打印⼀个集合体(如字符串或数组) 中输出对象的个数。最后瀑布型表格将控制权交给 ⼀个实际的命令处理函数,命令的参数将传递给这个函数来解析。⼀些命令, ⽐如 run, 处理参数的⽅式和传统C语⾔的argc/argv标准类似, ⽽其它⼀些命令, ⽐如 print, 则假定参数是⼀个 序表达式, 并将其完整传递给源码解析器。 机器界⾯ ⼀种GUI调试器⽅案是将GDB作为图形⽤户界⾯ 序的后端,将⿏标点击翻译成GDB 命令,然后将打印的结果显⽰在窗⼜中。这种⽅案已经在⼀些软件中实现,⽐如 KDbg和DDD(Data Display Debugger) 。但这个⽅法仍然不理想,因为有时候显⽰结果 时为了可读性会省略掉⼀些细节,前端提供上下⽂的能⼒也会影响到结果的显⽰。 为解决这个问题,GDB提供了⼀个被称为机器界⾯(Machine Inter ace ,MI)的接⼜。本 质上MI仍然是⼀个命令⾏界⾯,但是命令和结果都增加了额外的语法,使得其意义更 为显然:每个参数都使⽤了引号,复杂输出则使⽤定界符来分组,使⽤参数名来分 块。此外, MI的命令还可以加上顺序标识符作为前缀, 并在结果中返回,保证了结果和 命令的匹配。 为了⽐较两种界⾯, 分别给出

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档