利用dmesg和addr2line来重现bug

利用dmesg和addr2line来重现bug

有些时候,我们的程序crash了,但是我们没有保存core dump信息,这时如果我们想要知道程序在哪个位置出错,就不是那么容易了。

下面有一种方法,可以大致判断出程序出错的大致位置。


1.用dmesg查找出错的代码段地址。
命令格式:
[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. dmesg | grep program_name  
其中program_name是可执行文件,比如:
[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. $ dmesg | grep test_prog  
  2. [103936.227079] test_prog[29319]: segfault at 40078c ip 0000000000400634 sp 00007fffe54d4680 error 7 in test_prog[400000+1000]  
其中的ip后面的地址是程序出错处的地址。

2.用addr2line将地址解析成函数名。
紧接上面的例子:
[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. $ addr2line -e ./test_prog 0000000000400634 -f  
  2. _Z9errorFuncv  
  3. ??:0  
其中errorFunc即是出错的函数名,然后就可以找到相应的出错代码了。

本文转自:http://blog.csdn.net/cjfeii/article/details/20386457

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值