1. 生成带调试信息的程序
直接用g++编译:
$ g++ -g -ggdb -o test test.cpp
如果用CMake编译工程,则使用选项CMAKE_BUILD_TYPE=Debug:
$ cmake -DCMAKE_BUILD_TYPE=Debug ../test
这样做g++编译时就会包含选项-g。如果要同时包含-ggdb选项,可以设置变量CMAKE_CXX_FLAGS_DEBUG。
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
2. 设置Linux生成Core
2.1 设置core文件的大小
$ ulimit -c unlimited
2.2 设置core文件的名称
$ echo core-%e-%p > /proc/sys/kernel/core_pattern
%e - insert coredumping executable name into filename 添加导致产生core的命令名
%p - insert pid into filename 添加pid(进程id)
3. 生成core文件
运行程序,生成core文件。下面的命令强制生成core文件:
$ kill -s SIGSEGV
4. 调试Core
4.1 加载程序和core文件
$ gdb
或者进入gdb后
(gdb) file
(gdb) core
file从文件exec加载symbol和executable, core从core中加载cored