gdb分析coredump的几个常用命令介绍

7 篇文章 0 订阅

注:下面介绍的命令,部分是全写,部分是简写。另外在编译时需要加上 -g 参数,以便生成调信息,这样调试时可以尽可能直观的查看到变量信息

1.info proc mappings
显示各个模块(可执行程序、动态库等)segment映射的虚拟内存地址列表
例:

2.info register
显示寄存器的值,可以配合反汇编分析crash
例:

(gdb) info register
rax            0xdbbb6a00007f719b	-2613378610517544549
rbx            0x9e4b82c0	2655748800
rcx            0x3	3
rdx            0x0	0
rsi            0x7f719733b200	140125844779520
rdi            0xc27dcc00	3263024128
rbp            0x18d8fcf30	0x18d8fcf30
rsp            0x7f719733b2e0	0x7f719733b2e0
r8             0x15	21
r9             0xb0000	720896
r10            0x203000c	33751052
r11            0x0	0
r12            0x203a150	33792336
r13            0x63440000	1665400832
r14            0x7f719733b3d0	140125844779984
r15            0x7f71973430d4	140125844811988
rip            0x7f719baee1fe	0x7f719baee1fe <tang_cm::WebRtcFlowControl::HandleTimeout(long)+30>
eflags         0x10206	[ PF IF RF ]
cs             0x33	51
ss             0x2b	43
ds             0x0	0
es             0x0	0
fs             0x0	0
gs             0x0	0

3.layout asm
修改布局显示当前执行点前后的汇编代码,方便调试分析问题
例:

4.disas [地址]
反汇编:不加地址,则显示当前执行点函数的汇编代码;加地址,则可以显示该地址对应的汇编代码
例: 

(gdb) disas
Dump of assembler code for function HandleEvent(long):
   0x00007f719baee1e0 <+0>:	push   %rbx
   0x00007f719baee1e1 <+1>:	mov    %rdi,%rbx
   0x00007f719baee1e4 <+4>:	mov    0x140(%rdi),%rdi
   0x00007f719baee1eb <+11>:	mov    (%rdi),%rax
   0x00007f719baee1ee <+14>:	callq  *0x38(%rax)
   0x00007f719baee1f1 <+17>:	mov    0x148(%rbx),%rdi
   0x00007f719baee1f8 <+24>:	mov    (%rdi),%rax
   0x00007f719baee1fb <+27>:	callq  *0x38(%rax)
=> 0x00007f719baee1fe <+30>:	xor    %eax,%eax
   0x00007f719baee200 <+32>:	pop    %rbx
   0x00007f719baee201 <+33>:	retq

5.x /4xg [地址]
打印指定内存地址一定范围的值,/后面的4表示打印的个数,x表示16进制显示(d表示10进制整数显示,u表示10进制无符号整数显示),g表示以八字节来打印(b表示单字节,h表示双字节,w表示四字节)
例:

(gdb) x /4xg 0x000000008e08f920
0x8e08f920:	0x00000001b037e4dc	0xc000124e00000459
0x8e08f930:	0x0005b589ee4bbd84	0x0000000000000000

6.x /s [地址]

打印字符串

7.info locals

打印当前堆栈下的局部变量信息。这边需要注意的是,开启编译优化级别后,局部变量信息运行时可能会被优化导致无法正确显示。

8.bt

显示当前调用堆栈信息
例:

9.frame [数字]

切换当前的栈帧位置,使用bt命令打印出来的调用堆栈前面的 #数字 就是栈帧号,在调试时可以通过切换栈帧查看局部变量信息

10.info threads

显示当前所有运行的线程信息

11.t [数字]

切换到指定线程

12.thread apply all bt

一次性打印所有线程的调用堆栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值