一、情况描述
在已经使用ulimit - c unlimited
打开了core文件的基础上,运行程序产生了段错误。使用ls
命令查看当前目录下的文件,还是没看见任何和.core相关的文件。如下:
首先已经打开了段错误存储的设置:
ulimit -c unlimited
然后确认已经打开:
ulimit -c
确实是unlimited
:
运行程序产生段错误:
查看文件发现没有core文件:
查看相关设置:
$ cat /proc/sys/kernel/core_pattern
发现结果被 |
管道文件符吞了:
二、解决方法
经过查阅资料:
原来 设置为|/usr/share/apport/apport %p %s %c %P
的话,文件的结果会被Linux的一个进程apport
吞掉,拿去检查是不是系统的bug,所以看不到core文件了。
|/usr/share/apport/apport %p %s %c %P
如果想产生core文件,需要关闭这个进程:
sudo service apport stop
然后查看相关内容:
cat /proc/sys/kernel/core_pattern
结果变为core:
然后在编译文件的时候需要加入 -g
来产生Debug
的版本:
g++ client.cpp -o client -g
然后产生段错误就会产生core文件了:
然后就可以使用命令:
gdb ./clinet core
进行调试啦!
参考文献: