C程序在linux下的segmentation-fault(core-dumped)

调试程序过程中出现core dumped,各种原因项目无法导入eclipse,只能使用gbd进行调试。


Segmentation fault (core dumped)原因

Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。


使用gdb查看core文件

设置core文件大小:

ulimit -a
ulimit -c unlimited

gdb查看core文件:

gdb ./file core

使用方法

输入start使程序运行到main中第一行运行代码。next或者n为执行下一行程序,until xx执行到xx行,print或p可输出变量值,b xx用于在xx行设置断点,run或r用于执行程序至下一断点,d xx删除xx行断点。
我们可以先run一遍程序,这时它会提示出错行信息。然后until到出错行前5行,交替执行next和print,输出与出错行变量相关变量或指针的值。最终定位出错的根本操作在哪一行。修改之即可。


出错原因

数组越界,写C语言的过程中一定要密切关注数组越界问题。

#0  0x0000000000405ef0 in get_operator (fd=10, stateinfo=0x679c00 <stateinfo>)
at SIM_wifi_state.c:247

warning: Source file is more recent than executable.
247 while(buff[i+1]!='\"')
[Current thread is 1 (Thread 0x7f784ff96700 (LWP 10051))]
Author: Ykk
Link: https://ykksmile.top/posts/38716/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.