在 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,对于这种大小的核心来说绰绰有余。
我还尝试运行一个干净的 bash,env - bash --noprofile --norc
并且仍然运行二进制文件不会更新核心的 mtime,除非我先删除它。