在Mac OS X上,如果我向我的C程序发送SIGQUIT信号,则该程序终止,但没有核心转储文件。
在Mac OS X上,是否必须手动启用核心转储(如何启用?),或者它们被写入其他某个位置而不是工作目录?
在Mac OS X上,是否必须手动启用核心转储(如何启用?),或者它们被写入其他某个位置而不是工作目录?
似乎它们被默认压制了。运行
$ ulimit -c unlimited
将为当前终端启用核心转储,并将其放置在/cores
目录中,以core.PID
的形式。当您打开新会话时,它将再次设置为默认值。
此外,/cores目录必须存在,并且运行程序的用户必须对其具有写入权限。
上面的答案:
ulimit -c unlimited
是正确的 -- 但请确保在将会dump core的程序运行的同一个终端中运行此命令。您需要先运行ulimit命令。
默认情况下,Mac OS X中的特定目录是隐藏的。您可能希望在终端中启用此功能,然后核心转储文件应该在/cores目录中可见。
defaults write com.apple.finder AppleShowAllFiles TRUE
在苹果的论坛上,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
此外,苹果的控制台
应用程序中有一个包含崩溃报告
的列表。
/cores
,但请使用终端和 root 帐户查看此文件夹。 - sorin