我想了解一下核心转储是如何工作的。
我使用 test.c 文件生成核心转储:
#include <stdio.h>
void foo()
{
int *ptr = 0;
*ptr = 7;
}
int main()
{
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译用
gcc test.c -o test
Run Code Online (Sandbox Code Playgroud)
当我运行 ./test 时,它给了我以下消息
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
我的档案
/proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)
包含:
|/usr/share/apport/apport %p %s %c %d %P
Run Code Online (Sandbox Code Playgroud)
我检查了我是否有写入该目录的权限
/var/crash/
Run Code Online (Sandbox Code Playgroud)
但在核心转储之后,该文件夹(/var/crash/)中没有任何内容。我使用的是 Linux 版本 17.04。你知道这里会出什么问题吗?
编辑
我忘了提及我设置了限制:
ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)
所以输出
ulimit -c
Run Code Online (Sandbox Code Playgroud)
内容如下:
unlimited
Run Code Online (Sandbox Code Playgroud)
我什至尝试按照他们在如何启用 apport部分中所说的进行操作,因此我在前面添加了一个井号
'problem_types': ['Bug', 'Package']
Run Code Online (Sandbox Code Playgroud)
但尽管如此,在 /var/cash 中找不到核心转储