如何让Mac OS X CrashReporter调用调试器?

Sta*_*asM 8 c apache debugging macos

我在Mac OS X上有一个产生随机崩溃的Apache模块.我可以使用某些操作序列重现这些崩溃,并且这些崩溃会产生Crash Reporter对话框"httpd quit unexpectedly".有没有办法导致Crash Reporter启动调试器(xcode,gdb,any)而不是只显示回溯?

我试着运行httpdgdbhttpd -X,但崩溃不会发生,然后-它发生仅当许多的httpd的正在运行一次,我发现没有办法一下子gdb连接到所有的人.所以我希望也许我可以让CrashReporter在特定进程崩溃时附加调试器 - 有没有办法做到这一点?

Nic*_*ley 2

不幸的是,您描述的错误类型在受到检查干扰时往往会消失。

也就是说,可以尝试的一个选项是从模块内部启动 GDB 会话。 QA1573有一个使用 DTrace 的示例,这看起来更干净一些,但经过一些实验后,这似乎在多个进程中效果不佳。gdb(我找不到在进程崩溃时附加 DTrace 的方法;只有proc::postsig:signal-handle在进程崩溃后才会触发探测器。)

您可以从您的模块中执行类似的操作:

% echo 'c' > continue.txt
% osascript -e 'tell app "Terminal" to do script "gdb -x continue.txt attach <pid>"'
Run Code Online (Sandbox Code Playgroud)

这将为每个httpd进程打开一个单独的终端窗口。

您也可以gdb从外部开始,使用脚本(DTrace 或其他方式)监视httpd进程,并SIGSTOP在模块代码中使用 QA1573 中的方法来等待,直到脚本注意到新的httpd.