ubuntu开启core
- 检查是否开启core
ulimit -c //0表示没有开启
- 开启core
sudo vi /etc/profile //文件尾添加
# No core files by default 0, unlimited is oo
ulimit -S -c unlimited > /dev/null 2>&1
sudo source /etc/profile //立即生效
- 添加系统配置
sudo vi /etc/sysctl.conf //添加系统配置
# open, add core.pid
kernel.core_pattern = ./core_%t_%p_%e
kernel.core_uses_pid = 1
sudo sysctl -p /etc/sysctl.conf //立即启用
- 检查开启状态
ulimit -c
unlimited
cat /proc/sys/kernel/core_uses_pid
1
生成一个可以被调试的程序
C/C++程序来说,在编译时加上-g参数,保留调试信息
Makefile
直接在Flag中添加“-g”参数就可以- Cmake
需要在CMakeLists.txt中添加以下两行
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ")
SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall")
编译的时候,使用如下指令
cmake -DCMAKE_BUILD_TYPE=Debug/Release path
也可以在CMakeLists.txt中,写死编译条件
#SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_BUILD_TYPE "Release")
查看程序是否可以被调试
- readelf查看段信息
//如果有值,则可以debug
readelf -S 程序 | grep debug
- 直接gdb 程序
//出现如下字段,表示不能debug
Reading symbols from xxx..(no debugging symbols found)...done
gdb带参数的程序
- run 参数列表
gdb 程序
run 参数列表
- set args 参数列表
gdb 程序
set args 参数列表
run