linux下面使用core dump来分析程序崩溃

在linux下面,我们可以让程序在程序崩溃的时候生成core dump,利用这个这个文件和GDB工具,可以为我们找到程序崩溃的原因提供便利。core dump文件其实存储了程序当时运行的上下文,包括内存,线程,调用栈等信息。

默认linux是没有开启这个这个功能的,也就是默认情况下,如果你的程序崩溃了,系统并不会为你的程序生成这个文件的。可以通过ulimit这个命令来开启或者关闭,这个命令其实是设置shell和其子进程所能写的文件的大小,如果想查看当前的值,可以使用

ulimit

后面什么参数都不带,如果你之前还没有修改过,输出的值应为0,结合前面的解释,我们知道如果可写的文件的大小是0的情况下,不会产生core dump文件。那它可以设置哪些值呢?

  • 0
  • 数字
  • unlimited

0我们前面解释过了,数字表示,允许写的文件的大小,unlimited表示没有大小限制。

ulimit -c unlimited

 

如果设置了后面的2种值,当你运行程序的时候,无论你的程序是debug版本还是release版本,都会生成core dump文件。

 

为了避免你在重复输入上面的命令,你可以在 ~/.profile或者~/.bashrc中输入上述的命令。如何在程序中实现这一功能:

#include <sys/resource.h>

// core dumps may be disallowed by parent of this process; change that
struct rlimit core_limits;
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &core_limits);

 

为了让core dump产生更加准确的信息,我们在编译debug版本的时候,使用下面的调试选项,

-g3 -o0 -ggdb

 

使用core dump

生成的core dump文件一般在运行文件的当前的目录,不是在可你可执行程序的同级目录,名字为core。可以使用下面的命令,加载这个core文件

gdb [application] core

[application] 是你的可执行程序的名子。

 

进入后,可以使用bt之类的gdb的命令查看崩溃的信息。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *