如何解决段错误
来源:互联网 发布:php 修改$_get 编辑:程序博客网 时间:2024/05/22 12:18
程序运行时崩溃应该是经常遇到的事情,本篇文中就来讲解一下在Linux下如何解决程序崩溃,也就是发生了段错误之后找到程序具体出错的地方。
如果程序通过了编译,但是在使用命令 ./ a.out 运行时程序崩溃了,即显示 段错误(core dumped)
其实系统会在程序崩溃的那一刹那将整个内核的信息记录在一个文件里边,(ls 并不会看到这个文件)
使用命令 ulimit -a 打开ulimit这个文件 发现这个文件大小缺省为0 文件根本就装不进去
那么就需要我们手动将这个文件的大小改大一点。
使用 命令 ulimit -c 10240 (10240的位置可以是任意一个比较大的数字)然后再利用 ./ 执行一次。
当再次使用 ls 查看会发现这个 core.3288 文件就存在了 ----(3288表示产生这个文件的进程的 ID)
可以使用命令 file core.3288 ,将core.3288这个文件的具体信息给显示出来,命令最后会显示这个core文件是通过哪个文件产生的(假如是a.out)
PS:file命令是用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
接下来来调试分析问题到底出现在哪
使用命令 gdb 产生该core文件的文件名 core文件文件名 比如说 gdb a.out core.11277 然后回车
这个时候就会直接告诉我们问题出在哪个函数哪一行。
需要说明一下的是当前已经进入了调试模式,按 q 退出调试模式,然后就可以vim 我们的源文件根据错误信息修改我们的代码了。
注意:调段错误,编译的时候一定要加入-g选项,要不然在最后显示错误的时候只会显示错的地址,而不会显示错误的具体信息
下边就以一个极其简单的例子来具体显示一下解决段错误的整个过程
使用命令 vim test.c 打开test.c这个源文件,按 i 进行编辑,输入如下程序
很明显这个程序是有问题的,在FunTest函数中,对NULL进行了解引用,这势必会导致程序崩溃,接下来就来通过这个简单的问题代码来帮助理解怎么解决断错误。
使用:wq 退出 test.c 这个文件回到命令模式,利用命令 gcc -g test.c 编译test.c,顺利通过编译。
使用命令 ls 查看一下,发现多了一个a.out 可执行文件。
然后再使用命令 ./a.out 执行,这个时候问题就来了
使用命令 ulimit -a
重新运行一下然后再次使用 ls 命令查看,多了一个 core文件
利用命令 file core.3288查看一下这个文件的具体信息
然后使用命令 gdb a.out core.3288
最后 按 q 退出调试模式,然后修改我们的代码就OK了。
总结:
解决段错误主要就是如下几个步骤
step1:gcc -g
step2:ulimit -c 10240
step3 : ./a.out
step4 : gdb a.out core文件
阅读全文
0 0
- 如何解决段错误
- 段错误的解决
- 在MYSQL里 段错误 (core dumped)是什么原因?如何解决
- 如何定位段错误
- 如何调试段错误
- Linux 段错误的产生和解决
- 如何发现程序中的段错误?
- 异常和段错误如何产生的
- 如何使用gdb调试段错误
- 如何使用GDB调试段错误
- 如何使用GDB调试段错误
- 如何使用GDB调试段错误
- 502错误如何解决
- Oracle中重建索引时如何解决“无法为表空间 XXXXXX 中的段创建INITIAL区”错误
- Oracle中重建索引时如何解决“无法为表空间 XXXXXX 中的段创建INITIAL区”错误 .
- 段错误
- 段错误
- 段错误
- Java Socket 多线程简单入门案例
- Linux的基本指令
- VS2012创建ATL工程及使用MFC测试COM组件
- 汇总-oc
- 使用Quartz进行作业任务调度
- 如何解决段错误
- 9.输出10个斐波那契(Fibonacci)数列:1 1 2 3 5 8 13 21 34 55
- 哈夫曼树以及哈夫曼编码
- SpringMVC知识点总结(1)
- Python分析网易云音乐近5年热门歌单
- logsit回归代码的推导
- HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
- 演讲
- jquery html-与-text方法的区别