我试图了解核心转储的工作原理。
我使用test.c文件生成核心转储:
#include <stdio.h>
void foo()
{
int *ptr = 0;
*ptr = 7;
}
int main()
{
foo();
return 0;
}
我用
编译gcc test.c -o test
当我运行./test
时,它给了我以下信息Segmentation fault (core dumped)
我的档案
/proc/sys/kernel/core_pattern
包含:
|/usr/share/apport/apport %p %s %c %d %P
我检查过我有权写入目录
/var/crash/
但在核心转储之后,此文件夹中没有任何内容(/ var / crash /)。 我使用的是Linux版本17.04。 你知道这里会出问题吗?
修改
我忘了提到我设置限制:
ulimit -c unlimited
所以输出
ulimit -c
读取:
unlimited
我甚至试图在如何启用apport 部分中执行他们所说的here,所以我在
前添加了一个哈希符号'problem_types': ['Bug', 'Package']
但是所有这些都无法在/ var / cash
中找到核心转储答案 0 :(得分:2)
This链接包含无法生成coredump的清单。添加下面的列表以防万一将来无法访问。
答案 1 :(得分:0)
您为机器中的coredump设置了哪些文件大小限制? 您可以使用
进行检查$ ulimit -c
如果设置为0,则不会生成任何coredump - 这是大多数发行版中的默认设置。
您可以通过将coredump设置为&#39; unlimited&#39;来启用它们。或使用特定的文件大小限制。
$ ulimit -c unlimited
答案 2 :(得分:0)
我也在努力获取coredumps,而ulimit也有同样的问题。 Niranjan建议的特定于会话的设置对我也不起作用。
最后,我在https://serverfault.com/questions/216656/how-to-set-systemwide-ulimit-on-ubuntu找到了解决方案
在 /etc/security/limits.conf 中添加:
root - core unlimited
* - core unlimited
然后注销/登录。
然后
ulimit -c
终端上的应该返回“ unlimited”,并生成核心转储。