当我执行我正在处理的程序时,它失败并显示以下消息:
...
Aborted (core dumped)
但是,不会创建核心转储。核心转储是以前编写的,我不记得我更改了与之相关的任何内容。
当我跑ulimit -a
回来时,
$ ulimit -a
core file size (blocks, -c) unlimited
...
其他要点,
- 我验证了我的用户可以在当前目录中创建文件。
- 我读到了关于
/proc/sys/fs/suid_dumpable
.目前,它在我的机器上设置为 0。我尝试将其更改为 1 或 2,但没有区别。 - 我还尝试以 root 身份执行该程序,但这也没有什么区别。
不幸的是,我不记得什么时候可以生成最后一次成功的核心转储。
答案1
要禁用供应商提供的配置文件,建议的方法是
/dev/null
在 中的配置目录中放置一个符号链接/etc/
,其文件名与供应商配置文件相同。
sudo ln -s /dev/null /etc/sysctl.d/coredump.conf
sudo systemd-sysctl
自 systemd 以来,事物的管理方式有所不同。
答案2
您可能希望使用该coredumpctl
命令来检索核心转储或在其上运行 gdb。这是处理它们的“systemd 批准”方法。:-/
从某种意义上说,systemd 捕获所有这些东西是件好事,因为它会在一段时间后自动删除它们,并且还可以轻松上传错误报告的故障转储。
但是,对于那些在 systemd 参与之前就知道 coredump 如何工作的人来说,这是一个令人震惊的变化,几乎没有通知或提示。即使删除一个名为“core.pid.txt”的文件,其中包含使用 coredumpctl 获取 coredump 的说明以及如何关闭文件的创建.txt
也会有很大帮助,尽管这些也会乱七八糟文件系统一段时间。