在多次遇到core dumped导致程序中断,但是因为未生成core文件无法定位原因,故在此记录如果遇到segemtation fault(core dumped)未看见core文件改如何解决。
第一步,查看是否开启core文件生成:
在命令行输入ulimit -c
,该命令查看系统允许的core文件大小(个人猜测),如果是0那么当然不会生成core文件。有两种方法可以修改,一种直接在命令行修改,输入ulimit -c unlimited
即可不限制文件大小,但是这是暂时有效,仅在当前shell有效。第二种打开~/.bashrc文件,在最后添加ulimit -c unlimited
,之后编译一遍~/.bashrc文件即可永久生效。
第二步,查看core文件生成地址:
我们还需要注意到上述操作并不能保证一定有效,修改之后可能仍看不到core文件,这是因为core文件可能在生成后被一个进程捕获然后删除,所以会找不到,因此我们需要设置core文件的生成地址。进入root用户,我们可直接修改,在root的窗口下输入命令echo core > /proc/sys/kernel/core_pattern
即可,之后退出root,再次运行问题程序就可以看到core 文件了(祝大家不会生成这个哈哈哈哈)
接下来记录一下基础的gdb查看core文件命令。
查看core文件:gdb process_name core_name
。比如运行test文件遇到了core dumped,core文件名为core.1234,那么查看命令即为gdb test core.1234
即可查看。可以利用print var
查看var变量,利用l
查看出问题的代码方便定位