核心转储core dump

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

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

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

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

核心转储core dump_第1张图片

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

核心转储core dump_第2张图片

现在可以测试一下效果

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

int main()
{
    int *p=NULL;
    cout<<*p<

核心转储core dump_第3张图片

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

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

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

此时需要用到gdb命令

核心转储core dump_第4张图片

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

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

例如除0错误

核心转储core dump_第5张图片

核心转储core dump_第6张图片

 

你可能感兴趣的:(linux,linux,操作系统,gdb,core,dump,c++)