GDB调试的.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GDB调试的

GDB 是GNU 开源组织发布的一个强大的UNIX 下的程序调试工具。如果 你是在UNIX 平台下做软件,你会发现GDB 这个调试工具有比VC 、 BCB 的图形化调试器更强大的功能。同时GDB 也具有例如ddd 这样的图 形化的调试端。 一般来说,GDB 主要完成下面四个方面的功能: (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 (2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条 件表达式) (3)当程序被停住时,可以检查此时你的程序中所发生的事。 (4)动态的改变你程序的执行环境。 兴趣是最好的老师,这里先整理总结一下在调试的过程中经常遇到的问题。 带着这些问题进行学习和实践可以有助于加深印象 (1)如何打印变量的值?(print var) (2)如何打印变量的地址?(print var) (3)如何打印地址的数据值?(print *address) (4)如何查看当前运行的文件和行?(backtrace) (5)如何查看指定文件的代码?(list file:N) (6)如何立即执行完当前的函数,但是并不是执行完整个应用程序? (finish) (7)如果程序是多文件的,怎样定位到指定文件的指定行或者函数?(list file:N) (8)如果循环次数很多,如何执行完当前的循环?(until) (9)多线程如何调试?(???) [举例] ============= *启动gdb $gdb 这样可以和gdb 进行交互了。 *启动gdb ,并且分屏显示源代码: $gdb -tui 这样,使用了-tui选项,启动可以直接将屏幕分成两个部分,上面显示源代 码,比用list 方便多了。这时候使用上下方向键可以查看源代码,想要命令 行使用上下键就用[Ctrl]n 和[Ctrl]p. *启动gdb 调试指定程序app : $gdb app 这样就在启动gdb 之后直接载入了app 可执行程序,需要注意的是,载入 的app 程序必须在编译的时候有gdb 调试选项,例如gcc -g app app.c,注 意,如果修改了程序的源代码,但是没有编译,那么在gdb 中显示的会是 改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱 的。 *启动程序之后,再用gdb 调试: $gdb program PID 这里,program是程序的可执行文件名,PID是要调试程序的PID.如 果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID 。gdb 会自动attach 上去,并调试他。program 应该在PATH 环境变量 中搜索得到。 *启动程序之后,再启动gdb 调试: $gdb PID 这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID,PID是要调试程序的PID.这样gdb 就附加到程序上了,但是现在还 没法查看源代码,用file 命令指明可执行文件就可以显示源代码了。 **启动gdb 之后的交互命令: 交互命令支持[Tab]补全。 *显示帮助信息: (gdb) help *载入指定的程序: (gdb) file app 这样在gdb 中载入想要调试的可执行程序app 。如果刚开始运行gdb 而不 是用gdb app 启动的话可以这样载入app 程序,当然编译app 的时候要加 入-g 调试选项。 *重新运行调试的程序: (gdb) run 要想运行准备调试的程序,可使用run 命令,在它后面可以跟随发给该程 序的任何参数,包括标准输入和标准输出说明符(和 )和shell 通配符 (*、?、[、] )在内。 *修改发送给程序的参数: (gdb) set args no 这里,假设我使用r yes设置程序启动参数为yes ,那么这里的set args 会 设置参数argv[1]为no 。 *显示缺省的参数列表: (gdb) show args *列出指定区域(n1 到n2 之间) 的代码: (gdb) list n1 n2 这样,list 可以简写为l,将会显示n1 行和n2 行之间的代码,如果使用-tui 启 动gdb ,将会在相应的位置显示。如果没有n1 和n2 参数,那么就会默认 显示当前行和之后的10 行,再执行又下滚10 行。另外,list 还可以接函 数名。 一般来说在list 后面可以跟以下这们的参数: linenum 行号。 +offset 当前行号的正偏移量。 -offset 当前行号的负偏移量。 filename:linenum 哪个文件的哪一行。 functi

文档评论(0)

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

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

1亿VIP精品文档

相关文档