核心转储core dump

Posted TangguTae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了核心转储core dump相关的知识,希望对你有一定的参考价值。

core dump是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试(事后调试)。

常见的异常终止的情况比如说内存错误(非法访问内存),此时进程收到的信号是SEGSEGV信号,再例如发生除零错误,此时进程收到的信号是SIGFPE

一旦程序发生上面错误而异常终止,在满足一定条件下可以生成core文件,文件通常在可执行程序的路径下

操作系统默认不允许产生core文件,通过 ulimit -a 来确认是否会产生core文件。

我们可以修改core文件的大小,通过ulimit -c [大小]来修改。允许core文件最大的大小为1024kb

现在可以测试一下效果

 对空指针进行解引用,这样会出现内存错误

int main()

    int *p=NULL;
    cout<<*p<<endl;//内存非法访问
    return 0;

此时文件路径下多了一个core.xxx的文件。

注意,生成可执行程序之前的命令记得带上-g。

怎么查看core文件的信息呢?

此时需要用到gdb命令

我们看到这个程序是被11号信号终止(11号信号就是SEGSEGV),报错的行在第9行的代码。 

同样的其他的错误也可以被捕捉到

例如除0错误

 

以上是关于核心转储core dump的主要内容,如果未能解决你的问题,请参考以下文章

核心转储core dump

core dump

core dump

调试Go语言的核心转储(Core Dumps)

Linux:段错误(核心已转储) Segmentation fault (core dumped)(在Linux上如何得到一个段错误的核心转储)(笔记)(未完成,暂停)

Core dump文件和ECFS