利用dmesg和addr2line来重现bug

利用dmesg和addr2line来重现bug

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

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


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

2.用addr2line将地址解析成函数名。
紧接上面的例子:
$ addr2line -e ./test_prog 0000000000400634 -f
_Z9errorFuncv
??:0
其中errorFunc即是出错的函数名,然后就可以找到相应的出错代码了。

你可能感兴趣的:(c,linux,addr2line,dmesg,代码调试)