在Mac上,核心转储文件写在哪里?

83
在Mac OS X上,如果我向我的C程序发送SIGQUIT信号,则该程序终止,但没有核心转储文件。
在Mac OS X上,是否必须手动启用核心转储(如何启用?),或者它们被写入其他某个位置而不是工作目录?

2
与其抱怨,你可以重新表述一下 - 实际上,你的标题甚至没有动词。我很乐意为你的问题点赞,因为我对这个主题很感兴趣。但我认为这个问题并没有遵循 SO 所需的质量标准。 我甚至有相关的问题关于核心转储 https://dev59.com/znE95IYBdhLWcg3wrP0o顺便说一句,核心转储文件应该位于 /cores,但请使用终端和 root 帐户查看此文件夹。 - sorin
5
建议不是问题,小气却是。 - xyz
1
@Sorin FYI 'are'是一个(连接)动词。虽然在这里并不重要,但如果我们要批评语法,让我们把它弄对;)http://examples.yourdictionary.com/reference/examples/examples-of-linking-verbs.html - Rick Smith
6个回答

98

似乎它们被默认压制了。运行

$ ulimit -c unlimited

将为当前终端启用核心转储,并将其放置在/cores目录中,以core.PID的形式。当您打开新会话时,它将再次设置为默认值。


41
在 macOS 上,崩溃转储文件会被自动处理并记录在崩溃报告器中。要查找回溯文件,请打开控制台,然后前往用户诊断报告部分(位于“诊断和使用情况信息”组下),或者您可以在 ~/Library/Logs/DiagnosticReports 目录中找到它们。
您还可以通过监视system.log文件来检查转储文件的生成位置。例如:
tail -f /var/log/system.log | grep crash

实际的核心转储文件可以在/cores中找到。

另请参见:


15

此外,/cores目录必须存在,并且运行程序的用户必须对其具有写入权限。


6
我刚刚清理了它,占用了我186GB的空间! - Dragonborn

13

上面的答案:

ulimit -c unlimited

是正确的 -- 但请确保在将会dump core的程序运行的同一个终端中运行此命令。您需要先运行ulimit命令。


12

默认情况下,Mac OS X中的特定目录是隐藏的。您可能希望在终端中启用此功能,然后核心转储文件应该在/cores目录中可见。

defaults write com.apple.finder AppleShowAllFiles TRUE


4
谢谢。我正在使用终端浏览(ls -lah),但不管怎样,这是一个有用的提示。 - xyz

0

在苹果的论坛上,Quinn “The Eskimo!”有一个很好的解释https://developer.apple.com/forums/thread/694233

我大致按照那个指南进行了操作。以下是我所做的步骤。

授予/cores目录的写入权限。

PROMPT> ls -la / | grep cores
drwxr-xr-x    2 root  wheel    64 Dec  8  2021 cores
PROMPT> sudo chmod 1777 /cores
PROMPT> ls -la / | grep cores
drwxrwxrwt    2 root  wheel    64 Dec 21 23:29 cores

设置核心文件大小

PROMPT> ulimit -c unlimited

编译并签署程序

PROMPT> cargo build --release -p my-crashing-program
PROMPT> /usr/libexec/PlistBuddy -c "Add :com.apple.security.get-task-allow bool true" tmp.entitlements
PROMPT> codesign -s - -f --entitlements tmp.entitlements my-crashing-program

运行程序

PROMPT> my-crashing-program
thread 'main' panicked at 'boom', my-crashing-program/src/main.rs:74:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
dumping core for pid 80995
zsh: quit       my-crashing-program

现在有一个core文件

PROMPT> ls /cores
core.80995

此外,苹果的控制台应用程序中有一个包含崩溃报告的列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接