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

新手上路,请多包涵

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

我已经设置并验证了 ulimit

 ulimit -c unlimited
ulimit -a

我也试图找到一个名为“核心”的文件,但没有得到核心转储文件?

任何帮助,我的核心文件在哪里?

原文由 webminal.org 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 786
2 个回答

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

core_pattern 用于指定核心转储文件模式名称。

  • 如果模式的第一个字符是“|”,内核会将模式的其余部分视为要运行的命令。核心转储将被写入该程序的标准输入而不是文件。

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

无论如何,快速的答案是您应该能够在 /var/cache/abrt 中找到您的核心文件,其中 abrt 在被调用后存储它。类似地,使用 Appport 的其他系统可能会在 /var/crash 中隐藏内核,依此类推。

原文由 ephemient 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题