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

Jos*_*vin 4 linux ubuntu gdb core filemtime

在Ubuntu 12.04上,打开一个新的文本文件并编写:

#include <stdlib.h>

int main()
{
    abort();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在运行:

g++ yourfile.cpp
Run Code Online (Sandbox Code Playgroud)

然后运行可执行文件,该文件将进行核心转储:

./a.out
Run Code Online (Sandbox Code Playgroud)

现在检查文件的mtime:

-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core
Run Code Online (Sandbox Code Playgroud)

现在再次运行可执行文件:

./a.out
Run Code Online (Sandbox Code Playgroud)

现在再次检查mtime:

-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core
Run Code Online (Sandbox Code Playgroud)

一样的!为什么新的核心不会覆盖旧的核心?重建时,这会导致gdb抱怨内核比可执行文件旧。

为了确保这不是许可问题,我在/ tmp的新目录中尝试了此操作并在其中运行chmod -R 777 **/*。运行两次可执行文件仍然不会产生新的内核O_o。此外,ulimit -c报告有800000000,对于这样大小的内核来说绰绰有余。

我还尝试过使用干净的bash env - bash --noprofile --norc并仍然运行二进制文件不会更新内核的mtime,除非我先删除它。

Mar*_*k B 5

如果您参考https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999,则这是Ubuntu中的一个错误,O_EXCL用于打开文件,防止覆盖现有内核。

  • 错误具体而言。在2016年仍未修复。这使调试会话的数量级更加令人沮丧。 (2认同)