在 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 下的程序崩溃问题。