在Mac OS X上,如果我向C程序发送SIGQUIT,它将终止,但没有核心转储文件。您是否必须在MacOSX上手动启用核心转储(如何启用?),或者将它们写入其他位置而不是工作目录?
dldeef671#
它们似乎在默认情况下被抑制。
$ ulimit -c unlimited
将为当前终端启用核心转储,并将其作为core.PID放置在/cores中。当您打开新会话时,它将再次设置为默认值。
core.PID
/cores
8aqjt8rx2#
在macOS上,崩溃转储由Crash Reporter自动处理。您可以通过执行Console并转到 * 用户诊断报告 * 部分(在"诊断和使用信息"组下)来查找回溯文件,也可以在~/Library/Logs/DiagnosticReports中找到它们。您还可以通过监视system.log文件来检查转储生成的位置,例如:
~/Library/Logs/DiagnosticReports
system.log
tail -f /var/log/system.log | grep crash
您可以在/cores中找到实际的 * core * 转储文件。另见:
lh80um4z3#
此外,/cores目录必须存在,并且运行程序的用户必须具有该目录的写入权限。
e5njpo684#
上面的答案,ulimit -c无限制工作--但是一定要在运行转储核心的程序的同一个终端上运行它。你需要首先运行ulimit命令。
fcwjkofz5#
默认情况下,mac osx中的特定目录是隐藏的.你可能想在终端中启用这个特性,然后核心转储应该在目录/cores中可见.默认值写入com.apple.finder苹果显示所有文件真
xhv8bpkk6#
在苹果的论坛https://developer.apple.com/forums/thread/694233上有一个很好的解释Quinn “The Eskimo!”我大致上是按照这个指南做的。下面是我做的步骤。授予对/cores目录的全部写入访问权限
Quinn “The Eskimo!”
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文件
core
PROMPT> ls /cores core.80995
此外,苹果的Console应用程序也有一个Crash Reports列表。
Console
Crash Reports
6条答案
按热度按时间dldeef671#
它们似乎在默认情况下被抑制。
将为当前终端启用核心转储,并将其作为
core.PID
放置在/cores
中。当您打开新会话时,它将再次设置为默认值。8aqjt8rx2#
在macOS上,崩溃转储由Crash Reporter自动处理。
您可以通过执行Console并转到 * 用户诊断报告 * 部分(在"诊断和使用信息"组下)来查找回溯文件,也可以在
~/Library/Logs/DiagnosticReports
中找到它们。您还可以通过监视
system.log
文件来检查转储生成的位置,例如:您可以在
/cores
中找到实际的 * core * 转储文件。另见:
lh80um4z3#
此外,/cores目录必须存在,并且运行程序的用户必须具有该目录的写入权限。
e5njpo684#
上面的答案,
ulimit -c无限制
工作--但是一定要在运行转储核心的程序的同一个终端上运行它。你需要首先运行ulimit命令。
fcwjkofz5#
默认情况下,mac osx中的特定目录是隐藏的.你可能想在终端中启用这个特性,然后核心转储应该在目录/cores中可见.
默认值写入com.apple.finder苹果显示所有文件真
xhv8bpkk6#
在苹果的论坛https://developer.apple.com/forums/thread/694233上有一个很好的解释
Quinn “The Eskimo!”
我大致上是按照这个指南做的。下面是我做的步骤。
授予对
/cores
目录的全部写入访问权限设置核心转储文件的大小
编译并签署程序
运行程序
现在有一个
core
文件此外,苹果的
Console
应用程序也有一个Crash Reports
列表。