使用gdb和core查找段错误
1. 当一个程序出现段错误时,会出现以下提示:
Segmentation fault (core dumped)
core 指该程序运行时,进程空间的内存分布
dumped 表示内核已经把core抛出
通常,出现段错误提示时程序运行目录下应该自动生成一个core文件用来存储内核抛出的core,但是,由于linux环境一般默认设置core文件限制为0,所以一般情况下无法生成core文件。
2. 查看core文件大小限制:
ulimit -c
3. 将其修改为无限制:
ulimit -c unlimited
这样设置之后,若发生段错误就会有core文件生成了。
使用 -g 选项编译程序后,运行程序得到core文件,配合gdb就可以找到段错误的位置了
4. 运行命令
gdb a.out core
5. 示例
- 代码:
- 改程序运行发生段错误:
- 做以下操作:
经过上图所示步骤,可以轻易得到段错误发生在 test.c 文件的第 5 行(位于test函数下,被main函数调用)