文档目录

一、生成和应用场景

# 设置 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 文件写不进去