一、生成和应用场景#
# 设置 core dump 文件大小(不限)
ulimit -c unlimited
# 运行程序,如果崩溃会生成 core 文件
./my_server
# 程序崩了,生成 core 文件
ls -la core.*
# 输出:core.12345 ← pid=12345 的 core dump
# 用 GDB 加载
gdb ./my_server core.12345
(gdb) bt
#0 handle_request() at server.cpp:123
#1 worker_loop() at threadpool.cpp:45
#2 ...
# 看到崩溃在第 123 行
(gdb) print request
# 看到请求数据,分析为什么会导致第 123 行崩溃
二、生产环境最有用的场景#
你有一个线上服务,平时不好打断,但偶尔崩一次。
方案:
1. 在生产环境设置 ulimit -c unlimited。
2. 程序 crash 后 core 文件保留在磁盘上。
3. 把 core 拉回开发机分析(注意不要包含用户敏感数据)。
# 检查 core dump 是否正常生成
cat /proc/sys/kernel/core_pattern
# 常见配置:
# /var/lib/systemd/coredump/core.%p → systemd 管理的 core
# core → 当前目录生成 core 文件
# 如果看不到 core 文件,检查:
ulimit -c # 是不是 0(需要改成 unlimited)
df -h /tmp # 磁盘满了?core 文件写不进去