网站大量收购独家精品文档,联系QQ:2885784924

gdb调试方法.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
gdb调试方法

gdb的调试方法 1. gdb的编译方法: 一般来说GDB 主要调试的是C/C++程序。要调试C/C++程序,首先在编译时,我们必须 要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的-g 参数可以做到这一点,如: $ cc –g hello.c –o hello $ g++ -g hello.cpp –o hello 2. 启动GDB 的方法有以下几种: ■gdb program program 也就是你的执行文件,一般在当前目录下。 ■ gdb program core 用gdb 同时调试一个运行程序和core 文件,core 是程序非法执行后core dump 后产生的文件。 ■gdb program PID 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach 上去,并调试它。program 应该在PATH 环境变量中搜索到。 详细的开关可以用gdb –help 3. 启动GDB ,进入调试环境。 (gdb)help 4. 搜索源代码 不仅如此,GDB 还提供了源代码搜索的命令: forward-searchregexp searchregexp 向前面搜索。 reverse-searchregexp 全部搜索。 其中regexp就是正则表达式,也可以是一个字符串的匹配模式,关于正则表达式,我 就不在这里说了,还请各位查看相关资料。 5. 源代码的内存 可以使用info line 命令来查看源代码在内存中的地址。Info line 后面可以跟“行号”,“函 数名”,“文件名:行号”,“文件名:函数名”,这个命令会打印出所指定的源代码在运行时 的内存地址,如: (gdb) info line tst.c:func Line 5 of tst.c starts at address 0x8048456 func+6 and ends at 0x804845d func+13. 还有一个命令(disassemble)你可以查看源程序测当前执行时的机器码,这个命令会把 目前内存中的指令dump 出来。如下面的示例表示查看函数func 的汇编代码。 查看运行时数据 在你调试程序时,当程序被停住时,可以使用print 命令(简写命令为p),或是同义命令 inspect 来查看当前程序的运行数据。print 命令的格式是: printexpr print/fexpr expr是表达式,是你所调试的程序的语言的表达式(GDB 可以调试多种编程语言), f是输出的格式,比如,如果要把表达式按16 进制的格式输出,那么就是/x。 可以通过这种形式指定你想查看的变量,是哪个文件中的或是哪个函数中的。例如,查看 文件f2.c 中的全局变量x 的值: (gdb) p ‘f2.c’::x 当然,“::”操作 右边则是你想查看的内存的长度。例如,你的程序中有这样的语句: int *array = (int*)malloc(len*sizeof(int)) 于是,在GDB 调试过程中,你可以用如下命令显示出这个动态数组的取值: p *array@len @的左边是数组的首地址的值,也就是变量array 所指向的内容,右边则是数据的长度, 其保存在变量len 中,其输出结果,大约是下面这个样子: (gdb) p *array@len $1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40} 输出格式 一般来说,GDB 会根据变量的类型输出变量的值。但你也可以自定义GDB 的输出格式。 例如,你想输出一个整数的十六进制,或是二进制来查看这个整形变量的位的情况。要做到 这样,你可以使用GDB 的数据显示格式: x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。 (gdb) p i $21 = 101 (gdb) p/a i $22 = 0x65 查看内存 你可以使用examine 命令(简写是x)来查看内存地址中的值。X 命令的语法如下所示: x/n/f/uaddr n、f、u 是可选参数。 n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。 f 表示显示格式,参加上面。如果地址所指的是字符串,那么格式是s,如果地址是指令 地址,那么格式也可以是i。 u 表示从当前的地址往后请求的字节数,如果不指定的话,GDB 默认是4 个bytes。u 参 数可以用下面的字符来代替,b 表示单字节

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档