1. 调试 core dump
程序执行时, 经常会因为段错误(Segment Fault)而退出, 操作系统会把此程序当前内存信息 dump 到磁盘上(详见 wiki), 即生成 core 文件. 对 core 进行分析可以很快分析出导致程序 crash 的地方.
(1). 设置 core 文件大小
系统默认不会生成 core 文件, 需要进一步设置. core 文件的生成依赖于 shell 的设置, 在 shell 中运行命令: ulimit -a, 从第一行的设置项可以看到系统设置的 core file size 为 0, 即不生成 core file.
使用命令: ulimit -c unlimited 可以设置 core file size 为无限.
(2). 生成简单 core 文件
在 C++ 中制造一个 segment falt 太容易了, 直接给一个空指针赋值就可以了.
int main(int argc, char const *argv[])
{
char* p = nullptr;
*p = ‘a’;
return 0;
}
保存文件为 coreDumpTest.cpp, 编译并运行, 即可以现磁盘上多了一个 core 文件, 就是这个程序发生段错误 dump 下来的进程信息.
(3). 调试简单 core 文件
使用 gdb ./coreDumpTest core 来调试 core, 发现 gdb 直接就定位到了出错的语句(第4行赋值语句), 还可以通过 print 来查看当前上下文变量, 如指针 p 的值为 nullptr.