在Ubuntu 12.04上,打开一个新的文本文件并写下:
#include <stdlib.h>
int main()
{
abort();
return 0;
}
现在运行:
g++ yourfile.cpp
然后运行可执行文件,它将进行核心转储:
./a.out
现在检查文件的mtime:
-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core
现在再次运行可执行文件:
./a.out
现在再次检查mtime:
-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core
它是一样的!为什么一个新核心不会覆盖旧核心?重建时会导致gdb抱怨核心比可执行文件旧。
为了确保它不是一个权限问题,我在/ tmp的新目录中尝试了这个并在里面运行chmod -R 777 **/*
。两次运行可执行文件仍然没有生成新的核心O_o此外,ulimit -c
报告800000000,对于这个大小的核心来说已经足够了。
我还尝试使用env - bash --noprofile --norc
运行干净的bash,并且仍然运行二进制文件不会更新核心的mtime,除非我先删除它。
答案 0 :(得分:3)
如果你引用https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999这是Ubuntu中使用O_EXCL
打开文件的错误,防止它覆盖现有核心。
答案 1 :(得分:2)
core(5)手册页列出了未[重写] core
文件的某些条件。你可能遇到其中一个条件。请仔细阅读该手册页。