← 中文资源

简体中文版本

Linux: Segmentation fault (core dumped) 调试

用 core dump、gdb 与 ulimit 设置调试 Linux 段错误,定位出错指令与非法内存访问。

阅读英文原文

症状

程序以 Segmentation fault (core dumped) 崩溃,因信号 11 而退出。对特定输入可能稳定复现,在并发下则可能间歇发生。

诊断

启用 core 并分析回溯:

ulimit -c unlimited
./program bad-input
gdb ./program core -ex bt -ex 'info registers' -ex quit

用 sanitizer 重新构建以捕捉首次非法访问:

gcc -g -fsanitize=address,undefined -o program main.c

修复

针对回溯所指修正指针、边界或对象生命周期,并守卫解引用、以带长度参数的安全拷贝函数替代无界版本。

验证

在 ASan 下以原始输入运行;ASan 无报错且程序以 0 退出,确认非法内存访问已被修复。