Linux core dump analysis

574 阅读1分钟

Linux core dump analysis - #embeddedbits

内核转储(Core Dump)是一个磁盘文件,它包含进程终止时的内存映像,是Linux内核在处理SIGQUIT、SIGILL、SIGABRT、SIGFPE和SIGSEGV等信号时生成的。

例如,当应用程序由于无效内存访问(SIGSEGV)而崩溃时,可以生成core file。

有了Core dump,我们可以使用调试器(GDB)来检查进程终止时的状态,并识别导致问题的代码行。

随便写了一个会core dump的C代码:

int main()
{
  char *s;
  char c;

  s = (char *) 0;
  c = *s;           /* The segmentation violation happens here. */
  return 0;
}

默认情况下是不会生成一个core file,只会segment fault.

image.png

我们可以用ulimit去修改这个设置,使得输出一个core file:

kkbabe@ubuntu$   ulimit -c unlimited

image.png 默认情况下,在应用程序的工作目录下会产生一个名为core的文件。 如果没有产生核心文件,请检查用户是否对该目录有写入权限,以及文件系统是否有足够的空间来存储核心转储文件。

现在我们只需要用应用程序的核心转储文件(core dump file)和用调试符号(debugging symbols)构建(build)的可执行文件来运行GDB

kkbabe@ubuntu$   gdb -c  core a.out  -tui

image.png

除了能够找到导致core dump的代码以外,还可以对这部分的状态机进行分析.

image.png