运行 C 程序时,它显示 “(核心转储)” ,但我在当前路径下看不到任何文件。
我已经设置并验证了 ulimit
:
ulimit -c unlimited
ulimit -a
我也试图找到一个名为“核心”的文件,但没有得到核心转储文件?
任何帮助,我的核心文件在哪里?
原文由 webminal.org 发布,翻译遵循 CC BY-SA 4.0 许可协议
运行 C 程序时,它显示 “(核心转储)” ,但我在当前路径下看不到任何文件。
我已经设置并验证了 ulimit
:
ulimit -c unlimited
ulimit -a
我也试图找到一个名为“核心”的文件,但没有得到核心转储文件?
任何帮助,我的核心文件在哪里?
原文由 webminal.org 发布,翻译遵循 CC BY-SA 4.0 许可协议
在最近的 Ubuntu(在我的情况下为 12.04)上,可能会打印“分段错误(核心转储)”,但在您可能期望的位置没有生成核心文件(例如对于本地编译的程序)。
如果您的核心文件大小 ulimit 为 0(您尚未完成 ulimit -c unlimited
),则可能会发生这种情况——这是 Ubuntu 上的默认设置。通常这会抑制“(核心转储)”,让您陷入错误,但在 Ubuntu 上,核心文件通过 /proc/sys/kernel/core_pattern
管道传输到 Appport (Ubuntu 的崩溃报告系统),这似乎会导致误导性消息.
如果 Appport 发现有问题的程序不是它应该报告崩溃的程序(您可以在 /var/log/apport.log
中看到发生的情况),它会回退到模拟将核心文件放入 cwd 的默认内核行为(这是在脚本中完成的 /usr/share/apport/apport
)。这包括尊重 ulimit,在这种情况下它什么也不做。但是(我假设)就内核而言,生成了一个核心文件(并通过管道传输到 apport),因此出现消息“分段错误(核心转储)”。
最终,PEBKAC 忘记了设置 ulimit,但误导性的消息让我一度以为自己要疯了,想知道是什么在吃我的核心文件。
(此外,一般来说,core(5) 手册页 – man 5 core
-- 是一个很好的参考,可以帮助您了解核心文件的最终位置以及可能无法写入的原因。)
原文由 jtn 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答3.3k 阅读
2 回答3.2k 阅读
阅读 /usr/src/linux/Documentation/sysctl/kernel.txt 。
不是将核心转储写入磁盘,而是将系统配置为将其发送到
abrt
(意思是:自动错误报告工具, _而不是_“中止”)程序。 自动错误报告工具 可能没有像 应有 的那样记录…无论如何,快速的答案是您应该能够在
/var/cache/abrt
中找到您的核心文件,其中abrt
在被调用后存储它。类似地,使用 Appport 的其他系统可能会在/var/crash
中隐藏内核,依此类推。