- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.4.2. gdb的使用 在GDB中运行程序: 当以gdb program方式启动gdb后,gdb会在PATH路径和当前目录中搜索program的源文件。如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。 在gdb中,运行程序使用r或是run命令。 ?可以通过set args 命令指定运行时参数。 6.4.2. gdb的使用 gdh调试程序: 调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。你可以设置程序的在哪行停住,在什么条件下停住,在收到什么信号时停往等等。以便于你查看运行时的变量,以及运行时的流程。 当进程被gdb停住时,你可以使用info program 来查看程序的是否在运行,进程号,被暂停的原因。 在gdb中,我们可以有以下几种暂停方式: 断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。 6.4.2. gdb的使用 gdh调试程序:设置断点(BreakPoint) 1)break function 2)break linenum3)break +offset 和 break -offset 4) break filename:linenum 5) break filename:function 6)break *address (内存地址) 7)break命令没参数时,表示下一条指令处停住。 ?????? 8)break if condition (break if i=100 ) 9)info break n(查看断点信息) 6.4.2. gdb的使用 gdh调试程序:设置观察点(WatchPoint) 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。有下面的几种方法来设置观察点: 1) watch expr : 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序 2)rwatch expr:当expr被读时,停住程序。 3) awatch expr:? 当expr的值被读或被写时,停住程序。 4) info watchpoints: 列出当前所设置了的所有观察点。 6.4.2. gdb的使用 gdh调试程序:设置捕捉点(CatchPoint) 可设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为: catch event 。当event发生时,停住程序。event可以是下面的内容: 1)throw 一个C++抛出的异常。??2)catch 一个C++捕捉到的异常。 ??3)exec 调用系统调用exec时。? 4) fork 调用系统调用fork时。 ? 5) vfork 调用系统调用vfork时。 ? 6)load 或 load libname 载入共享库?? 7) unload 或 unload libname 卸载共享库 6.4.2. gdb的使用 恢复程序运行和单步调试 当程序被停住了,可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来。也可以使用step或next命令单步跟踪程序。 ?continue [ignore-count],???c [ignore-count], ??? fg [ignore-count] 恢复程序运行,直到程序结束,或是下一个断点到来。ignore-count表示忽略其后的断点次数。 step count:??????? 单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有debug信息。 next count :????? 同样单步跟踪,如果有函数调用,他不会进入该函数。 6.4.2. gdb的使用 查看栈信息 当程序被停住了,需要做的第一件事就是查看程序是在哪里停住的。当程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 backtrace 和 bt: 打印当前的函数调用栈的所有信息。 backtrace n backtrace -n 6.4.2. gdb的使用 显示源代码 : GDB 可以打印出所调试程序的源代码,当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。 一般来说在list后面可以跟以下这们的参数: ??? linenum?? 行号。??? +offset?? 当前行号的正偏移量。??? -offset?? 当前行
文档评论(0)