【发布时间】:2017-04-28 11:47:05
【问题描述】:
我在 CTest 框架中运行单元测试时遇到分段错误。所以我需要核心转储文件来解决段错误。但无法找到它。
【问题讨论】:
我在 CTest 框架中运行单元测试时遇到分段错误。所以我需要核心转储文件来解决段错误。但无法找到它。
【问题讨论】:
在最近的 Ubuntu(在我的情况下为 12.04)上,可能会打印“分段错误(核心转储)”,但在您可能期望的地方没有生成核心文件(例如对于本地编译的程序)。
如果您的核心文件大小 ulimit 为 0 (you haven't done ulimit -c unlimited),就会发生这种情况——这是 Ubuntu 上的默认设置。通常这会抑制“(核心转储)”,让您陷入错误,但在 Ubuntu 上,核心文件通过/proc/sys/kernel/core_pattern 传送到 Appport(Ubuntu 的崩溃报告系统),这似乎会导致误导性消息。
如果 Apport 发现有问题的程序不是它应该报告崩溃的程序(您可以在 /var/log/apport.log 中看到发生的情况),它会回退到模拟将核心文件放入 cwd 的默认内核行为(这是在脚本 /usr/share/apport/apport 中完成的)。这包括尊重 ulimit,在这种情况下它什么也不做。但是(我假设)就内核而言,生成了一个核心文件(并通过管道传输到 apport),因此出现消息“分段错误(核心转储)”。
最终 PEBKAC 忘记设置 ulimit,但误导性消息让我一度以为自己要疯了,想知道是什么在吃我的核心文件。
(此外,一般来说,core(5) 手册页 -- man 5 core -- 是一个很好的参考,可以帮助您了解核心文件的最终位置以及可能无法写入的原因。)
【讨论】: