打开 core dump 功能
终端输入
ulimit -c
如果输出 0,说明没有开启 core dump 功能
不限制 core dump 存储信息的大小,可以执行:
ulimit -c unlimited
限制 core dump 大小,可以执行(单位是 KB):
ulimit -c xxx
以上指令只对当前终端有效,想要永久生效需要修改 “/etc/security/limits.conf” 文件,重启后生效
sudo vim /etc/security/limits.conf
修改 core 文件保存路径和命名
默认情况下,内核在 core dump 时所产生的 core 文件放在与该程序相同的目录中,并且文件名固定为 core
执行下面指令修改 core 文件路径:
echo /tmp/crash/core-%e-%t | sudo tee /proc/sys/kernel/core_pattern
其中 “/tmp/crash/core-%e-%t” 是 core dump 文件的保存路径和命名
注意:这里的 “/tmp/crash/” 目录如果不存在,程序崩溃时候不会自动创建 “/tmp/crash/” 目录,也就不会保存 core dump 文件了
参数表:
%p - insert pid into filename 添加pid(进程id)
%u - insert current uid into filename 添加当前uid(用户id)
%g - insert current gid into filename 添加当前gid(用户组id)
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加导致产生core的命令名
程序添加 gdb 调试信息
catkin_make 编译:
catkin_make -DCMAKE_BUILD_TYPE=Debug
或者在 CMakelist.txt 文件前面添加以下代码
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")