Linux C语言中的Segmentation fault错误

Segmentation faults
主要的原因有
?内存访问违规行为
?无限or过深的递归处理
调查方法可以使用core dump
所谓core dump,是指在执行中的程序因错误而强制结束时,将当时程序使用的存储器空间的内容全部复制并保存在文件中的内容。用于调试工作。
例子
如果编译执行上面的代码,就会报Segmentation fault错误
利用core dump调试
按照以下步骤进行调查
- 设置核心适配器的大小
- 用gcc的-g选项编译(调试信息授予)
- 生成运行→Core文件
- 在gdb中读取核心文件
- 调查原因之处
设置核心适配器的大小
首先运行此命令
“ulimit”似乎是设置系统资源上限的命令。
“-c选项”设置核心转储的大小。
“unlimited”,也就是没有上限。
用gcc的-g选项编译,生成运行→Core文件
除了常规编译之外,还将“-g”添加到选项中
这允许您添加调试信息,如果编译成功,让我们运行
Segmentation fault错误就出来了
如果你在这里显示文件列表
你有一个文件叫“core.XXXXX”。这是核心转储的文件
在gdb中读取核心文件
gbd是控制台处理的调试器,使用此gdb,可以通过打开核心转储文件来查看Segmentation fault发生时的调试信息。
是说错误在“main.c的第15行”,看看细节
在“q→Enter”中,您可以退出gdb
调查原因之处
原因应该是访问超过准备好的缓冲区,对于mv命令,共171Byte,完全越界了
mv -f /home/work/coredump/aaa/xxxxxxxxxxxxxxxxxxxxxxxx/data/zzzzzzzz/testfilexxxxx_new.txt /home/work/coredump/aaa/xxxxxxxxxxxxxxxxxxxxxxxx/data/zzzzzzzz/testfilexxxxx.txt
通过增加缓冲区大小可以解决此问题
char cmd[256];
结束语
在Linux的C语言中,发生了Segmentation fault,所以我试着使用核心转储解决了这个问题。
基本上原因是
?内存访问违规行为。
?无限or过深的递归处理。