我想了解一下核心转储是如何工作的。
我使用 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 中找不到核心转储
小智 0
您为计算机中的核心转储设置了多少文件大小限制?您可以使用检查它
$ ulimit -c
Run Code Online (Sandbox Code Playgroud)
如果它设置为 0,则不会生成任何核心转储 - 这是大多数发行版中的默认设置。
您可以通过将其设置为“无限制”或使用特定的文件大小限制来启用核心转储。
$ ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)