ubuntu下不生成core dumped文件解决办法一则
1. 什么是core dumped文件简单讲,就是linux下的程序,在遇到空指针解引用、栈错误等原因崩溃时,bash会输出一条:有时会是这样:Segmentation fault后面跟的那个core dumped不见了,说明没有产生core dumped文件。怎样人为制造一个Segmentation fault呢?最简单的办法就是解引用一个空指针:int *p=0;printf("%d",*p)
1. 什么是core dumped文件
简单讲,就是linux下的程序,在遇到空指针解引用、栈错误等原因崩溃时,bash会输出一条:
有时会是这样:
Segmentation fault后面跟的那个core dumped
不见了,说明没有产生core dumped文件。
怎样人为制造一个Segmentation fault呢?最简单的办法就是解引用一个空指针:
int *p=0;
printf("%d",*p);
2. core dumped文件拿来干什么
就是拿来在程序崩溃时还原现场用的。
如果你看到core dumped字样,并且在目录下也找到了一个叫core的文件,那你可以直接用gdb定位到程序崩溃的位置了(注意用gcc编译时也要开-g选项才能用gdb调试):
$ gdb ./a.out core
gdb加载后已经跳到程序崩溃的位置了。就是在main.c的20行。
3. 我的Segmentation fault后面没有core dumped,怎么开?
先用ulimit -c
,如果看到0,说明没有开core dump。
所以我们输入ulimit -c unlimited
,打开core dump。
再次用ulimit -c
,看到unlimited了,说明core dump打开了。
注意这句ulimit -c unlimited
只对当前会话有效。要永久有效的话看这里
https://www.cnblogs.com/Anker/p/6079580.html
4.我的ulimit -c已经是unlimited了,怎么还是看不到core文件?
关键来了。首先输入命令
$ man 5 core
查看手册中的core内容,然后往下翻:
它这里面列举了几条不产生core文件的原因,你可以逐条对照。最有可能的原因是/proc/sys/kernel/core_pattern文件里面把你的core文件发送到别处去了。我的ubuntu系统默认就是这样干的。
然后打开/proc/sys/kernel/core_pattern文件,里面如果不是像下图里我的这个这样:
而是显示的/proc/什么什么的,就代表它把你的core文件发到别的地方去了。
编辑这个文件,把它内容换成和我的一样。在ubuntu系统上可以这样:
$ sudo gedit core_pattern
前面那个sudo是为了获取root权限,以编辑这个文件。把内容改成core,然后保存。
正常情况下你应该可以生成core文件了。
参考
https://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-the-current-directory
https://www.cnblogs.com/Anker/p/6079580.html
更多推荐
所有评论(0)