1.利用 GDB 调试 CoreDump
CoreDump时一个二进制的文件,进程发生错误崩溃时,内核会产生一个瞬时的快照,记录该进程的内存、运行堆栈状态等信息保存在core文件之中。做个简单的类比,core 文件相当于飞机运行时的"黑匣子",能够帮助我们更好的调试 C++程序的问题。OK,接下来笔者将介绍一下如果利用GDB 来调试 CoreDump的文件。
- CoreDump 文件的大小
首先我们先确定一下操作系统是否会产生 CoreDump 文件。通过ulimit -c
获取 core 文件的限制大小:
上面显示笔者电脑的 core 文件的大小是0,我们需要调整一下。通过ulimit
调整为无限制。当然这种调整是临时的,reboot 之后就恢复为0了。
ulimit -c ulimited
如果需要永久修改,可以通过/etc/security/limits.conf 来修改 core 文件的大小。
- CoreDump 文件的生成路径
默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。(建议将后缀改为进程号) 笔者这里简单起见,不进行修改了。 - 编写core 代码,这里笔者利用线程访问了空指针