利用dmesg和addr2line再现bug
在某些情况下,我们的程序已关闭,但没有保存核心dump信息。 此时,如果想知道程序在哪个位置发生了错误,就不是那么简单了。
有一种方法可以大致判断程序错误的大致位置。
1.用dmesg查找出错的代码段地址。
命令格式:
dmesg | grep program_name其中program_name是类似于以下内容的可执行文件:
$ dmesg|grep test _ Prog [ 103936.227079 ] test _ Prog [ 29319 ] : segfault at 40078 CIP 000000000400634 sp 0007 FFE 540078 d 468888078
2.用addr2line将地址解析成函数名。
接在上面的例子之后:
$ addr2line-e./test _ Prog 00000000400634-f _ z9 errorfuncv?0其中,errorFunc是有错误的函数名称,可以找到合适的错误代码。