使能 C++ 程序的核心转储
1. 使能 core dump
1
2
3
4
5
6
7
8
9
10
11
# 查看是否使能 core dump, -a 显示所有设置
sudo ulimit -c
# 使能 core dump,不限制core dump文件大小
sudo ulimit -c unlimited
# 限制 core dump 文件大小为 2G
sudo ulimit -c 4194304
# 关闭 core dump
sudo ulimit -c 0
2. 修改 core dump 文件位置
临时修改 core dump 文件位置:
1
2
# 修改 core dump 文件位置为 /tmp/corefile,以及格式
echo /tmp/corefile/core-%e-%p-%t > /proc/sys/kernel/core_pattern
永久修改 core dump 文件位置:
1
2
3
4
5
6
# /etc/sysctl.conf
kernel.core_pattern = /tmp/corefile/core-%e-%p-%t
kernel.core_uses_pid = 0
# 生效
sysctl –p /etc/sysctl.conf
core dump文件格式:
1
2
3
4
5
6
7
%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的命令名
3. core dump 管理工具:coredumpctl
1
2
3
4
5
6
7
8
# 查看 core dump 列表
sudo coredumpctl list
# 显示指定 core dump 文件信息
sudo coredumpctl info core_filename
# 分析 core dump 文件
sudo coredumpctl gdb core_filename
4. 使用 gdb 调试 core dump 文件
编译 core dump 文件时,需要加上 -g
参数。
使用file
命令查看 core dump 文件是由哪个可执行文件产生的:
4.1 调试 core dump 文件
1
gdb program core(gdb + 可执行文件 +core文件)
5. 参考
本文由作者按照 CC BY 4.0 进行授权