有时候我们的程序出现问题而崩溃,但是又不方便现场调试的时候,我们可以通过core文件来快速定位出问题的位置。
core文件是程序意外退出时,内核生成的一种文件,通常发行版默认会关闭生成core文件的选项,我们可以执行
ulimit -c unlimited
命令来打开core文件生成选项。然后我们可以复现出现的问题,当程序崩溃之后,会生成core.xxx的文件(我们可以通过配置文件详细的控制core文件的名字包括路径、生成的时间、pid、gid和uid,有兴趣的可以了解下),我们拿到core文件之后,需要重新为我们的应用程序添加一个调试选项,一般是在Makefile中添加 -g 选项。然后我们使用使用gdb调试应用程序
gdb ./xxxx
然后执行
core-file core.xxx
再执行
bt
就能看到程序崩溃时的堆栈信息,就能定位到出问题的具体地方。