core dump是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试(事后调试)。
常见的异常终止的情况比如说内存错误(非法访问内存),此时进程收到的信号是SEGSEGV信号,再例如发生除零错误,此时进程收到的信号是SIGFPE。
一旦程序发生上面错误而异常终止,在满足一定条件下可以生成core文件,文件通常在可执行程序的路径下。
操作系统默认不允许产生core文件,通过 ulimit -a 来确认是否会产生core文件。
我们可以修改core文件的大小,通过ulimit -c [大小]来修改。允许core文件最大的大小为1024kb
现在可以测试一下效果
对空指针进行解引用,这样会出现内存错误
- int main()
- {
- int *p=NULL;
- cout<<*p<
//内存非法访问 - return 0;
- }
此时文件路径下多了一个core.xxx的文件。
注意,生成可执行程序之前的命令记得带上-g。
怎么查看core文件的信息呢?
此时需要用到gdb命令
我们看到这个程序是被11号信号终止(11号信号就是SEGSEGV),报错的行在第9行的代码。
同样的其他的错误也可以被捕捉到
例如除0错误