[解决问题]查找产生Segmentation fault (core dumped)错误的真正原因

在我们运行程序的时候,经常会遇到Segmentation fault (core dumped)的问题,这种问题多见于内存操作不当,比如空指针、野指针的读写操作,数组越界访问,常量被破坏等。对于一个比较大的程序,比较难定位错误具体的位置,因此我们需要利用core文件进行错误的查找。

1、对core文件扩容

我们使用以下的命令查找core的大小信息:

$ ulimit -a

一般来说,core的默认大小都是0,无法保存程序的错误信息,我们用以下的命令进行扩充:

$ ulimit -c 1024
$ ulimit -c unlimited

第一行将core的大小扩展至1024字节,当然我们写一个稍微大一点的程序就不够用了,一般生成的core大小基本等于程序运行中占用的内存大小,因此用第二行的命令更合适。

2、遇到的问题

一般情况上面的命令可以更正core文件的限制大小,然而有时会报如下的错:

-bash: ulimit: core file size: cannot modify limit: Operation not permitted

一般这类问题我们考虑权限的原因,然而这次我们不是通过加sudo解决,我们需要打开/etc/security/limits.conf文件,然后添加如下内容:

你的用户名 hard core unlimited
你的用户名 soft core unlimited

你的用户名是命令行里@前面的那个,保存后执行

$ ulimit -c unlimited

就可以解决问题了。更改前后如图所示,第一行最后表示core的限制大小。[解决问题]查找产生Segmentation fault (core dumped)错误的真正原因_第1张图片

3、查找具体问题
[解决问题]查找产生Segmentation fault (core dumped)错误的真正原因_第2张图片

具体问题在倒数第五行,搜一下这个问题发现是无效的内存引用,知道了问题具体是什么就比较容易定位以及解决问题了。

你可能感兴趣的:([解决问题]查找产生Segmentation fault (core dumped)错误的真正原因)