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

我已经设置并验证了ulimit:

ulimit -c unlimited 
ulimit -a 

我还试图找到一个名为“核心”的文件,但没有得到核心转储文件? 有人帮忙吗,我的核心文件呢?


当前回答

随着systemd的启动,还有另一个场景。默认情况下,systemd将在其日志中存储核心转储,可以使用systemd-coredumpctl命令访问。在core_pattern-file中定义:

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

检查存储的核心转储的最简单方法是通过coredumpctl列表(旧的核心转储可能已经被自动删除)。 这种行为可以通过简单的“hack”来禁用:

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

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

其他回答

对于fedora25,我可以在

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

where ccpp-2017-02-16-16:36:51-2974" is pattern "%s %c %p %u %g %t %p % as per ' /proc/sys/kernel/core_pattern'

我使用的是Linux Mint 19(基于Ubuntu 18)。我想在当前文件夹中有coredump文件。我必须做两件事:

修改/proc/sys/kernel/core_pattern(通过# echo "core.%p.%s.%c.%d. "# sysctl -w kernel.core_pattern=core.% P .%s.%c.%d.%P) 通过$ ulimit -c无限提高核心文件大小的限制

这已经写在答案里了,但我写出来是为了简洁地总结。有趣的是,修改限制不需要root权限(根据https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user,非root只能降低限制,所以这是出乎意料的-欢迎评论)。

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

Core_pattern用于指定核心dumpfile模式名。 如果模式的第一个字符是'|',内核将进行处理 模式的其余部分作为要运行的命令。核心转储将是 写入该程序的标准输入,而不是写入文件。

您的系统不是将核心转储写入磁盘,而是将其发送到abrt(意思是:自动错误报告工具,而不是“abort”)程序。自动错误报告工具可能没有像它应该被记录的那样…

在任何情况下,快速的答案是您应该能够在/var/cache/abrt中找到您的核心文件,abrt在调用后将它存储在那里。类似地,使用Apport的其他系统可能会在/var/crash中存放内核,等等。

我在这里找到了Ubuntu 20.04系统的核心文件;

/var/lib/apport/coredump 

随着systemd的启动,还有另一个场景。默认情况下,systemd将在其日志中存储核心转储,可以使用systemd-coredumpctl命令访问。在core_pattern-file中定义:

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

检查存储的核心转储的最简单方法是通过coredumpctl列表(旧的核心转储可能已经被自动删除)。 这种行为可以通过简单的“hack”来禁用:

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

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