1、查看coredump是否打开
首先进入root模式,查看当前core文件大小的限制
ulimit -c
得到的结果跟对应含义如下:
- 0 表示关闭,不会生成core文件
- unlimited 表示core文件的大小无限制
2、修改core文件大小限制
可以使用下面的命令来修改这一值
ulimit -c unlimited
再次使用ulimit -c命令查看可以看到结果是unlimited。
但是这个只针对当前打开的这个连接终端,新开一个终端可以看到又失效了。
3、设置core存储路径
可以到/etc/sysctl.conf中,在文件末尾添加上core文件的存储路径:
kernel.core_pattern=/corefile/core_%e_%p_%t
其中命名参数含义如下:
- %e:文件名
- %p:进程号
- %t:unix时间
保存之后reboot按理说是可以解决了,但是就恰好上了ubuntu20的core生成机制的当。
这时查看当前core文件的存储路径会发现跟自己保存的不一样。
cat /proc/sys/kernel/core_pattern
ubuntu20的服务apport.service会自动生成崩溃报告,这个服务导致core_pattern不能生效。
4、关闭apport.service服务
这时可以关闭apport.service这个服务
sudo systemctl disable apport.service
如果这个命令无法关闭的话,可以修改/etc/default/apport文件,将enable改成0
/etc/default/apport
5、测试生成core文件
这时可以测试一下能否生成core文件
测试代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *ptr = NULL;
strncpy(ptr, "abc", 3);
return 0;
}
也可以对core进行调试(gdb)。