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一开始告诉你的那样。



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

转载于:https://www.cnblogs.com/aglanceofunknown/archive/2013/02/28/4612091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值