Core Dump 简介
Core 文件是进程崩溃时的内存镜像,包含寄存器、栈、堆等状态。配合 GDB 可精确定位崩溃位置。
启用 Core Dump
# 临时启用(当前 shell)
ulimit -c unlimited
# 永久启用(写入 ~/.bashrc)
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc
# 查看 core 文件命名模式
cat /proc/sys/kernel/core_pattern
# 典型输出:core.%p (core.进程ID)
实战演示
1. 测试代码 gdb_test.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(const int argc, const char *argv[]) {
char *ptr = NULL;
*ptr = '\n'; // 故意解引空指针
return 0;
}
2. 编译并运行
gcc gdb_test.c -o gdb_test -g # 必须加 -g 保留调试符号
./gdb_test
# 输出:Segmentation fault (core dumped)
# 生成 core.5521(进程号)
3. GDB 加载 Core 分析
gdb gdb_test -c core.5521
# 输出关键信息:
# Core was generated by `gdb_test'.
# Program terminated with signal 11, Segmentation fault.
# #0 0x000000000040048b in main (argc=1, argv=0x7fff00c0b438) at gdb_test.c:18
# 18 *ptr='\n';
GDB 常用调试命令
| 命令 | 作用 |
bt / backtrace | 查看调用栈 |
frame N | 切换到第 N 栈帧 |
info locals | 查看局部变量值 |
info args | 查看函数参数 |
print expr | 打印表达式值 |
list | 显示源码上下文 |
生产环境最佳实践
- 编译保留符号:Release 版也加
-g,配合 strip 分离符号文件
- Core 文件管理:设置固定目录、限制大小、自动清理
- 自动化分析:CI 集成
gdb -batch -ex bt 生成崩溃报告
- 配合 Sanitizer:
-fsanitize=address 可捕获更多内存错误
常见崩溃类型速查
| 信号 | 名称 | 典型原因 |
| SIGSEGV (11) | Segmentation fault | 空指针、越界、use-after-free |
| SIGABRT (6) | Abort | assert 失败、malloc 错误、std::terminate |
| SIGFPE (8) | Floating point exception | 除零、整数溢出 |
| SIGILL (4) | Illegal instruction | 栈溢出、指令损坏、CPU 不支持指令集 |
- 上一篇文章: HDU 2079 选课时间:多重背包组合计数
- 下一篇文章: POJ 2230 Watchcow:无向图欧拉回路 Hierholzer 算法
Copyright ©
程式碼之家 All Rights Reserved