前言

最近用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。
gdb_1
使用命令:ulimit -c unlimited,可以设置core file size为无限,但只限当前终端可用。
gdb_2

C++文件调试

如果是单一的C++文件调试,直接用在编译时加上-g添加调试信息即可
比如g++ -g test.cpp -o test,遇到core dump会在test.cpp所在目录下生成core文件,直接gdb ./test core即可

CMake文件调试

如果工程是用CMake构建的,那么需要在CMakeLists.txt中加入如下代码:

1
2
3
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

和单个C++文件一样,进程奔溃时,系统会把奔溃前的信息转储在一个叫做core的文件,直接gdb ./test core即可。
另外objdump这个指令也可以查看core文件,objdump -s core


©2018 - Felicx 使用 Stellar 创建
总访问 113701 次 | 本页访问 326
共发表 83 篇Blog · 总计 127.5k 字