- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
手把手教你转GDB
单步调试一节做快速简单介绍即可,大家对这一块相对比较熟悉 * * * * 举例说明所有的打印属性 * 先介绍stack frame的概念 然后看图给大家一个直观影响 接下来再开始讲具体的命令 * 在程序当前执行到的那一桢,PC不会被显示 * 先看例子,再抛出问题,然后带着问题讲下面的内容 * 缺省编辑器是/bin/ex, linux下没有安装 * * * (2)常用调试命令介绍 * 手把手教你玩转GDB--ZeshengWu * (3)退出GDB结束调试 停止应用程序 (gdb) kill:杀掉当前GDB正在调试的应用程序所对应的子进程 (gdb) detach:停止调试当前正在调试的进程,与attach配对试用 退出GDB (gdb) End-of-File(ctrl+d) (gdb) quit kill小技巧--不退出GDB而对更新当前正在调试的应用程序:在GDB中用kill杀掉子进程,然后直接更换应用程序可执行文件,再重新执行run,GDB便可加载新的可执行程序启动调试 * 手把手教你玩转GDB--ZeshengWu * (4)寻求帮助 (gdb) help class-name: 查看class-name类别的帮助信息 (gdb) help all: 查看所有类别的帮助信息 (gdb) help command: 查看command命令的帮助信息 (gdb) apropos word: 查看word关键字相关的命令 (gdb) complete prefix: 查看以prefix为前缀的所有命令 * 手把手教你玩转GDB--ZeshengWu * (4)寻求帮助 info:查看与被调试的应用程序相关的信息 show:查看GDB本身设置相关信息 * 手把手教你玩转GDB--ZeshengWu * 3.大显身手---玩转GDB (1)函数调用栈探密 (2)调试中信号的响应 (3)修改程序运行、源码 (4)多线程调试 (5)自定义命令 * 手把手教你玩转GDB--ZeshengWu * (1)函数调用栈探密 A. Stack frame(栈桢) Call stack(调用栈) Stack frame是指保存函数调用上下文信息的一段区域 Call stack是用来存放各个Stack frame的一块内存区域 * 手把手教你玩转GDB--ZeshengWu * (1)函数调用栈探密 B. 查看Call stack相关信息 (gdb) backtrace:显示程序的调用栈信息,可以用bt缩写 (gdb) backtrace n:显示程序的调用栈信息,只显示栈顶n桢 (gdb) backtrace –n:显示程序的调用栈信息,只显示栈底部n桢 (gdb) set backtrace limit n: 设置bt显示的最大桢层数,缺省没有限制 (gdb) where, info stack: bt的别名 * 手把手教你玩转GDB--ZeshengWu * (1)函数调用栈探密 C. 查看Stack frame信息 (gdb) frame n: 查看第n桢的简要信息 (gdb) info frame n:查看第n桢的详细信息 简要信息:桢号,$pc, 函数名,函数参数名和参数值,源文件名和行号 详细信息:当前桢地址,上一桢$eip(pc), 函数名,源文件名和行号,本桢的$eip,上一桢地址,下一桢地址,源码语言,参数列表地址,各参数的值,局部变量地址,上一桢的$sp,保存的一些寄存器 * 手把手教你玩转GDB--ZeshengWu * (1)函数调用栈探密 C. 查看Stack frame信息 (gdb) info locals:查看当前桢中函数的参数相关信息 (gdb) info args: 查看当前桢中的局部变量相关信息 * 手把手教你玩转GDB--ZeshengWu * (2)调试中信号的响应 GDB可以检测到应用程序运行时收到的信号,可以通过命令提前设置当收到指定信息时的处理情况。 * 手把手教你玩转GDB--ZeshengWu * Question—如何在GDB调试这个程序的时候,让这个程序收到SIGINT信号? (2)调试中信号的响应 A. handle signal (gdb) handle signal [keywords]: 如果没指定keywords, 该命令查看GDB对signal的当前的处理情况;如果指定了keywords,则是设置GDB对signal的处理属性, keywords就是要设置的属性 signal: 可以为整数或符号形式的信号名,e.g. SIGINT和2是同一信号 keywords: print noprint: print收到指定的信号,打印出
文档评论(0)