core dump

来源:互联网 发布:alt 左键 ubuntu 编辑:程序博客网 时间:2024/06/08 03:06

有的程序可以通过编译,但在运行时会出现segmentatin fault(即段错误)。这通常是指针错误引起的,但这不像编译错误一样可以在编译的时候定位到行,而是没有任何信息,使得调试程序变得困难。

这时我们可以通过gdb来调试,但如果程序很大的话,通过gdb一步步寻找显然不合适。因此,我们可以使用core dump。

要想让系统在信号中断造成的错误时产生core文件,我们需要系统中进行设置。首先需设置core大小为无限,ulimit -c unlimited。其次可通过echo "core" > /proc/sys/kernel/core_pattern 设置core文件生成的目录和文件名。此处我们设置为当前目录下,文件名为core。

之后我们使用如下c程序:


如图所示,编译运行后,就会提示已经生成了core dump文件。同时,在当前目录下,会生成一个名为core的文件。

之后,通过gdb的bt命令,就可看到程序在哪里发生了中断,如图所示(gdb调试core文件使用方式为 gdb 可执行文件 core文件):


从图中可看出,中断发生在main()函数中的printf()函数。当然,printf函数的底层还调用了vfprintf()函数。


另外,之前一直以为core是linux kernel的意思。最近才发现,core是另一种意思。

在使用半导体作为内存的材料前,人类是利用线圈当做内存的材料的,线圈叫做core,用线圈做的内存就叫做core memory。如今,半导体工业蓬勃发展,已经没有人用core memory了,不过,在许多情况下,人们还是把记忆体叫做core。