unix Mac上的核心转储写在哪里?

hrysbysz  于 2022-12-23  发布在  Unix
关注(0)|答案(6)|浏览(205)

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

dldeef67

dldeef671#

它们似乎在默认情况下被抑制。

$ ulimit -c unlimited

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

8aqjt8rx

8aqjt8rx2#

在macOS上,崩溃转储由Crash Reporter自动处理。
您可以通过执行Console并转到 * 用户诊断报告 * 部分(在"诊断和使用信息"组下)来查找回溯文件,也可以在~/Library/Logs/DiagnosticReports中找到它们。
您还可以通过监视system.log文件来检查转储生成的位置,例如:

tail -f /var/log/system.log | grep crash

您可以在/cores中找到实际的 * core * 转储文件。
另见:

lh80um4z

lh80um4z3#

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

e5njpo68

e5njpo684#

上面的答案,
ulimit -c无限制
工作--但是一定要在运行转储核心的程序的同一个终端上运行它。你需要首先运行ulimit命令。

fcwjkofz

fcwjkofz5#

默认情况下,mac osx中的特定目录是隐藏的.你可能想在终端中启用这个特性,然后核心转储应该在目录/cores中可见.
默认值写入com.apple.finder苹果显示所有文件真

xhv8bpkk

xhv8bpkk6#

在苹果的论坛https://developer.apple.com/forums/thread/694233上有一个很好的解释Quinn “The Eskimo!”
我大致上是按照这个指南做的。下面是我做的步骤。
授予对/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

此外,苹果的Console应用程序也有一个Crash Reports列表。

相关问题