GDB 会用到的一些操作

一、程序core了,可能会这样调试:

1. 首先gdb会告诉你程序怎么崩了,例如:Program terminated with signal 11, Segmentation fault

2. 然后你开始找错在哪里:

backtrace | bt :列出当前堆栈的跟踪,函数。

frame | f [number]:选择指定的栈帧。或者使用 up | down [number] 来上下跳转栈帧。

list | l [line-number|function|-|start#,end#|filename:function] :列出源代码。

info [arg|locals|catch|all-reg] :列出参数,局部变量,异常处理,寄存器。这个命令还有很多选项,help info查看一下。

3.如果这时觉得变量太多了,可以这样一个个观察:

print | p [variable|file::variable|'file'::variable] :打印指定变量值。

print | p[x|d|u|o|t] var :以 十六,有符号,无符号,八,二进制 打印变量。

4.有些问题需要观察一段地址的数据值才能发现:

print | p *array-var@length :打印arrary-var中的前length项

x [/FMT] address : FMT is a repeat count followed by a format letter and a size letter.
   Format letters are:

      o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address), i(instruction), c(char) and s(string).
   Size letters are:

      b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed according to the format

例,x/32xb 0xab1fefec

0xab1fefec:     0xb7    0xbd    0xcc    0xec    0xea    0xaa    0x00    0x00
0xab1feff4:     0x09    0x00    0x00    0x00    0x08    0x00    0x00    0x00
0xab1feffc:     0x01    0x00    0x00    0x00    Cannot access memory at address 0xab1ff000

然后。。。就找到了问题的所在。读取了不可访问地址(Segmentation fault),就像GDB一开始告诉你的那样。



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2013-02-28 15:11  J.Way.C  阅读(100)  评论(0编辑  收藏  举报