在 Linux 系统中,core 文件(通常命名为 core 或 core.<pid>)是当程序发生严重错误(如段错误 Segmentation Fault、总线错误 Bus Error 等)时,由操作系统自动生成的一个进程内存转储文件。它记录了程序崩溃时的内存状态、寄存器值、调用堆栈等信息,是调试的重要依据。
触发条件
SIGSEGV、SIGABRT、SIGFPE 等)。ulimit -c 和 /proc/sys/kernel/core_pattern)。作用
gdb)分析 core 文件,可以定位程序崩溃的具体位置(如代码行、函数调用栈)。常见配置
bash
ulimit -c # 显示当前限制(若为 0 则禁止生成)
ulimit -c unlimited # 临时允许生成(重启终端后失效)/etc/security/limits.conf 中添加:/proc/sys/kernel/core_pattern(需 root 权限):bash
echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
格式说明:
%e:程序名%p:进程 PID%t:崩溃时间戳调试方法
使用 gdb 加载 core 文件:
gdb /path/to/program /path/to/core
常用命令:
bt(backtrace):查看崩溃时的调用栈。info registers:查看寄存器状态。frame N:切换到指定栈帧。权限问题:
suid/sgid,默认不会生成 core 文件(需通过 sysctl fs.suid_dumpable=1 启用)。磁盘空间:
core 文件可能很大(尤其是内存占用大的程序),需确保磁盘有足够空间。
容器环境:
在 Docker/Kubernetes 中,需额外配置容器权限和卷挂载才能生成 core 文件。
bash
gdb ./my_program core.1234
(gdb) bt # 查看崩溃堆栈通过合理配置和分析 core 文件,可以高效诊断 Linux 下的程序崩溃问题。