为什么我的核心文件没有被覆盖?

时间:2012-10-01 02:11:41

标签: linux ubuntu gdb core filemtime

在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,除非我先删除它。

2 个答案:

答案 0 :(得分:3)

如果你引用https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999这是Ubuntu中使用O_EXCL打开文件的错误,防止它覆盖现有核心。

答案 1 :(得分:2)

core(5)手册页列出了未[重写] core文件的某些条件。你可能遇到其中一个条件。请仔细阅读该手册页。