检测我的 Mac 应用何时崩溃,然后继续正常崩溃

Detect when my Mac app is crashing, then go ahead and crash normally

通常,当 Mac 应用收到 SIGSEGVSIGILL 等崩溃信号时,进程会停止,几秒钟后 OS 会以某种方式创建一个崩溃报告文件并告知用户。但是,如果我使用 sigaction 处理程序拦截信号,则不会发生这种正常行为。我想做的是检测崩溃何时发生,使用在信号处理程序中被记录为安全调用的少数函数做一些工作,然后继续以正常方式崩溃。有没有办法做到这一点?我尝试在信号处理程序中重新发出信号,但这样做不对。

通过像这样结束信号处理程序并使用默认处理重新发送信号,我几乎可以得到我想要的行为:

signal( inSignal, SIG_DFL );
pthread_kill( pthread_self(), inSignal );
usleep( 10000 ); /* give time for signal to happen */

查看 Apple's source codeabort() 帮助我解决这个问题。