一、什么是 Core Dump?
Core Dump(核心转储)是程序崩溃时,操作系统将进程当时的内存快照、寄存器状态、堆栈调用链等关键信息写入的二进制文件。它相当于程序 “崩溃瞬间的快照”,允许开发者在程序崩溃后,通过调试工具(如 GDB)还原崩溃现场,定位问题根源(如空指针、数组越界、内存泄漏导致的野指针等)。
Core Dump 的核心作用
- 事后调试:程序在生产环境崩溃后,无需重现崩溃场景,通过 Core 文件即可分析问题。
- 精准定位:还原崩溃时的变量值、函数调用关系、内存状态,避免 “猜问题”。
- 跨环境调试:生产环境(无调试工具)生成 Core 文件后,可复制到开发环境用 GDB 分析。
二、Core Dump 产生的原理
程序并非所有错误都会生成 Core 文件,其产生依赖于操作系统信号机制和系统配置的双重控制。
2.1 触发 Core Dump 的 “致命信号”
程序运行时,若收到操作系统发送的致命信号(默认处理动作是 “终止进程并生成 Core 文件”),则会触发 Core Dump。常见致命信号如下:
| 信号名 | 信号值 | 触发场景(典型) |
|---|---|---|
SIGSEGV |
11 | 段错误(非法内存访问,如空指针、数组越界、野指针) |
SIGFPE |
8 | 浮点错误(如除零、浮点运算溢出) |
SIGABRT |
6 | 程序主动调用abort()(如assert断言失败、malloc内存分配失败) |
SIGILL |
4 | 非法指令(如执行了损坏的代码、指令集不兼容) |
SIGBUS |
7 | 总线错误(如访问未对齐的内存地址、物理内存访问错误) |
注意:若程序通过
signal()或sigaction()自定义了这些信号的处理函数,且未在处理函数中调用abort(),则可能不会生成 Core 文件。
2.2 控制 Core Dump 的系统配置
操作系统默认可能关闭 Core Dump 生成(避免占用磁盘空间),需通过以下配置开启和管理。
1. Core 文件大小限制:ulimit
ulimit用于控制当前 Shell 会话中进程的资源限制,其中-c选项专门控制 Core 文件的最大大小:
- 查看当前配置:
ulimit -c输出0表示禁用 Core Dump(默认值),unlimited表示无大小限制。 - 临时开启 Core Dump:
ulimit -c unlimited仅对当前 Shell 会话生效(关闭 Shell 后失效)。 - 持久化配置(全局生效):编辑
/etc/security/limits.conf,添加以下内容(需重启或重新登录生效):conf
* soft core unlimited # 所有用户的软限制(默认生效) * hard core unlimited # 所有用户的硬限制(不可突破)
2. Core 文件路径与命名:core_pattern
默认情况下,Core 文件生成在程序运行的当前目录,文件名固定为core。若多个程序崩溃,会覆盖旧的 Core 文件。可通过


1万+

被折叠的 条评论
为什么被折叠?



