前言
最近用C++写ros程序,老是有莫名其妙的core dump。而调试core dump最方便就是使用gdb,这里做个记录。
调试准备
程序执行时, 经常会因为段错误(Segment Fault)而退出,操作系统会把此程序当前内存信息dump到磁盘上,即生成core
文件。那gdb主要就是分析core文件。
设置core文件大小
系统默认不会生成core文件,需要进一步设置。core文件的生成依赖于shell的设置, 在shell中运行命令:ulimit -a
,从第一行的设置项可以看到系统设置的core file size 为0,即不生成core file。
使用命令:ulimit -c unlimited
,可以设置core file size为无限,但只限当前终端可用。
C++文件调试
如果是单一的C++文件调试,直接用在编译时加上-g
添加调试信息即可
比如g++ -g test.cpp -o test
,遇到core dump会在test.cpp
所在目录下生成core
文件,直接gdb ./test core
即可
CMake文件调试
如果工程是用CMake构建的,那么需要在CMakeLists.txt中加入如下代码:
1 | SET(CMAKE_BUILD_TYPE "Debug") |
和单个C++文件一样,进程奔溃时,系统会把奔溃前的信息转储在一个叫做core的文件,直接gdb ./test core
即可。
另外objdump
这个指令也可以查看core文件,objdump -s core
。