引言:程序在Linux系统中运行时出错的时间并不能预测,也许在三分钟之内程序就崩溃了,也许运行一个月之后才发生错误。
如果前一节课学到的GDB调试,显然调试上十天半个月是不可能的。这里我们用core dump来解决。
一、Core Dump:信息转存、核心转存。
core dump是一个过程,即Linux会把程序运行过程中发生异常的内存内容转存到core文件。
core dump主要解决段错误(Segment fault)。
二、发生段错误的基本原因有:
1、数组访问越界;
2、对空指针操作;
3、栈溢出;
4、修改只读内存的内容。
三、启用/关闭 Core Dump:
四、Core文件分析:打开:ulimit -c unlimited
关闭:ulimit -c 0
(在Linux系统中默认关闭该功能)
在发生core dump之后会在该程序所在路径下生成一个core文件。
注意:在编译程序时需要用-g来加入调试信息,否则将让错误逃之夭夭。
> gdb ./test core.13140
#include <stdio.h> #include <stdlib.h> void main() { int *ptr = NULL; *ptr = 3; }
* gdb可以直接定位到程序出错的位置: