没打开coredump,利用dmesg调试core的方法

线上的机器为防止coredump把机器打死,通常都会把core关闭。如果线上机器出现core等问题,该怎样进行调试呢?

通过dmesg可以解决上面的问题。

首先输入dmesg看相应的输出信息,如下图:

 没打开coredump,利用dmesg调试core的方法_第1张图片

把上面的地址做差值就得到相应的出问题的代码地址,如下图:

没打开coredump,利用dmesg调试core的方法_第2张图片

 

 如果没有gdb也可以用下面的命令进行计算:

echo "obase=16; $(echo $(( 16#7fc40ae435c0 - 16#7fc40ac61000)))" |  bc | tr '[:upper:]' '[:lower:]'

 

之后利用addr2line以及相应的程序就可以找到出问题的位置:

 

下图是addr2line的帮助

没打开coredump,利用dmesg调试core的方法_第3张图片

 

一些程序出问题即使打开了core,但是也可能没有core文件产生。

看一下dmesg的输出或者看一下/var/log/message文件中的内容,可能帮助我们解决问题。

 

还可以参考:

https://stackoverflow.com/questions/2549214/interpreting-segfault-messages

https://www.enodev.fr/posts/decode-segfault-errors-in-dmesg.html等

你可能感兴趣的:(debug)