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.
我们可以用ulimit去修改这个设置,使得输出一个core file:
kkbabe@ubuntu$ ulimit -c unlimited
默认情况下,在应用程序的工作目录下会产生一个名为core的文件。 如果没有产生核心文件,请检查用户是否对该目录有写入权限,以及文件系统是否有足够的空间来存储核心转储文件。
现在我们只需要用应用程序的核心转储文件(core dump file)和用调试符号(debugging symbols)构建(build)的可执行文件来运行GDB
kkbabe@ubuntu$ gdb -c core a.out -tui
除了能够找到导致core dump的代码以外,还可以对这部分的状态机进行分析.