上一篇                     
               
			  如何在Linux中生成core dump文件?
- Linux
- 2025-06-02
- 2158
 在Linux中生成core dump文件需先设置core文件大小:
 
 
ulimit -c unlimited,然后配置生成路径和格式,如
 echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern,程序崩溃时将自动在指定目录生成core文件,用于调试分析。
什么是 Core Dump?
Core Dump(核心转储)是 Linux 系统在程序崩溃或收到终止信号时生成的内存快照文件,它记录了程序崩溃瞬间的内存状态、寄存器值和堆栈信息,是开发者诊断程序崩溃、内存泄漏等问题的关键工具。
核心转储的配置与生成步骤
检查当前系统设置
ulimit -c # 查看 core 文件大小限制
- 返回 0表示禁止生成,unlimited表示无限制。
- 临时解除限制(当前会话有效): ulimit -c unlimited 
永久启用 Core Dump
编辑 /etc/security/limits.conf,在文件末尾添加:
* soft core unlimited * hard core unlimited
保存后退出,重启系统或重新登录生效。
自定义 Core 文件存储路径
编辑 /etc/sysctl.conf:
kernel.core_pattern = /var/coredump/core-%e-%t-%p
参数说明:

- %e:程序名称
- %t:时间戳(Unix 时间)
- %p:进程 ID
应用配置:
sudo sysctl -p
测试 Core Dump 生成
   # 触发崩溃的示例程序
   #include <stdio.h>
   int main() { 
       int *p = NULL; 
       *p = 1;  // 触发段错误
       return 0;
   } 
编译并运行:
gcc -o crash crash.c && ./crash
成功生成时输出:
Segmentation fault (core dumped)
分析 Core Dump 文件
使用 gdb 诊断问题:

gdb ./crash /var/coredump/core-crash-12345-1698765432
常用命令:
- bt:查看堆栈回溯(Backtrace)
- info registers:检查寄存器状态
- print [变量]:查看变量值
示例输出:
#0  0x0000555555555151 in main () at crash.c:3
   3         *p = 1;常见问题解决
问题 1:未生成 Core 文件
- 检查项: 
  - ulimit -c是否为- unlimited
- 磁盘空间是否充足
- 程序是否有写权限(如 /var/coredump需chmod 777)
- AppArmor/SELinux 是否拦截(临时禁用:sudo setenforce 0)
 
问题 2:Core 文件被截断
- 原因:磁盘空间不足或进程资源限制。
- 解决: echo "fs.suid_dumpable=2" | sudo tee -a /etc/sysctl.conf sudo sysctl -p 
高级配置技巧
压缩 Core 文件
修改 /etc/sysctl.conf:
kernel.core_pattern = |/usr/bin/gzip -c > /var/coredump/core-%e-%t.gz
按用户隔离存储
kernel.core_pattern = /home/%u/coredumps/core-%e-%p
脚本自动化分析
创建分析脚本 analyze_core.sh:

#!/bin/bash gdb -batch -ex "bt" -ex "quit" $1 $2 > crash_report.txt
| 场景 | 关键命令/配置 | 
|---|---|
| 开启生成 | ulimit -c unlimited | 
| 永久生效 | /etc/security/limits.conf | 
| 自定义路径 | kernel.core_pattern | 
| 分析工具 | gdb [程序] [core文件] | 
Core Dump 是 Linux 故障排查的“黑匣子”,通过合理配置和分析,开发者能精准定位程序崩溃根源,提升系统稳定性,建议在生产环境中启用并定期归档核心转储文件。
引用说明:
- Linux man手册:man 5 core、man sysctl.conf
- GNU Debugger 官方文档:GDB: The GNU Project Debugger
- Linux 内核参数文档:Kernel.org Documentation
 
  
			