核心转储 – 但核心文件不在当前目录?

当运行一个C程序时,它说“(核心转储)”,但在当前path下我看不到任何文件。

我已经设定和validation了限制:

 ulimit -c unlimited ulimit -a 

我也试图find名为“核心”的文件,但没有得到核心转储文件?
任何帮助,我的核心文件在哪里?

阅读/usr/src/linux/Documentation/sysctl/kernel.txt 。

[/ proc / sys / kernel /] core_pattern用于指定核心转储文件模式名称。

  • 如果模式的第一个字符是'|',那么内核将把模式的其余部分当作要运行的命令。 核心转储将写入该程序的标准input,而不是写入文件。

而不是将核心转储写入磁盘,而是将系统configuration为将其发送到abrt程序。 自动化的错误报告工具可能不是应该logging的 …

在任何情况下,快速的答案是你应该能够find你的核心文件在/var/cache/abrt ,其中abrt被调用后存储它。 同样,使用Apport的其他系统可能会将/var/crash核心松动 ,等等。

在最近的Ubuntu上(我的情况是12.04),可能会打印出“Segmentation fault(core dumped)”,但是没有产生核心文件(例如在本地编译的程序)。

如果核心文件大小ulimit为0(您还没有完成ulimit -c unlimited ),则会发生这种情况 – 这是Ubuntu上的默认设置。 通常情况下,这会压制“(核心转储)”,让你陷入你的错误,但在Ubuntu上,corefiles通过/proc/sys/kernel/core_pattern送到Apport (Ubuntu的崩溃报告系统),这似乎导致误导信息。

如果Apport发现有问题的程序不是一个,它应该报告崩溃(你可以在/var/log/apport.log看到),它回退到模拟将核心文件放在cwd(这是在脚本/usr/share/apport/apport )。 这包括尊重ulimit,在这种情况下,它什么也不做。 但是(就我个人而言)就内核而言,生成了一个核心文件(并将其传送给apport),因此出现了消息“Segmentation fault(core dumped)”。

最终PEBKAC忘记设置ulimit,但误导性的消息让我觉得我发疯了一阵子,想知道吃我的核心文件是什么。

(另外,一般来说,核心(5)手册页 – man 5 core – 对于核心文件的结束位置以及可能没有写入的原因而言是一个很好的参考。)

随着systemd的推出,还有另外一个场景。 默认情况下,systemd将在其日志中存储核心转储,可以通过systemd-coredumpctl命令进行访问。 在core_pattern文件中定义:

 $ cat /proc/sys/kernel/core_pattern |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e 

这种行为可以通过简单的“黑客”来禁用:

 $ ln -s /dev/null /etc/sysctl.d/50-coredump.conf $ sysctl -w kernel.core_pattern=core # or just reboot 

与往常一样,核心转储的大小必须等于或高于被转储的核心的大小,例如ulimit -c unlimited

我可以想到以下两种可能性:

  1. 正如其他人已经指出,该计划可能chdir() 。 用户运行的程序是否允许写入到目录chdir()中? 如果不是,则不能创build核心转储。

  2. 出于某种奇怪的原因,核心转储没有命名为core.*您可以检查/proc/sys/kernel/core_pattern 。 而且,您命名的find命令不会find典型的核心转储。 您应该使用find / -name "*core.*" ,因为coredump的典型名称是core.$PID

如果您在RHEL上缺less核心转储,以及在使用abrt ,请确保/etc/abrt/abrt-action-save-package-data.conf

包含

 ProcessUnpackaged = yes 

这可以为不是已安装软件包的一部分 (例如本地构build的)的二进制文件创build崩溃报告(包括核心转储)。

对于fedora25,我可以find核心文件在

 /var/spool/abrt/ccpp-2017-02-16-16:36:51-2974/coredump 

根据`/ proc / sys / kernel / core_pattern'的ccpp-2017-02-16-16:36:51-2974" is pattern "%s %c %p %u %g %t %P %