我在 Mac OS X 上有一个 Apache 模块会产生随机崩溃。我可以通过特定的操作顺序重现这些崩溃,并且这些崩溃会产生 Crash Reporter 对话框“httpd 意外退出”。有没有办法让 Crash Reporter 启动调试器(xcode、gdb 等)而不是仅仅显示回溯?
我已经尝试在 gdb
下使用 httpd -X
运行 httpd
但崩溃并没有发生 - 只有当许多httpd 正在同时运行,但我发现无法同时将 gdb 附加到所有这些上。所以我希望也许我可以让 CrashReporter 在特定进程崩溃时附加调试器 - 有没有办法做到这一点?
最佳答案
不幸的是,您描述的错误类型在检查时有消失的趋势。
也就是说,可以尝试的一个选项是从您的模块内部启动一个 GDB session 。 QA1573有一个使用 DTrace 的示例,它看起来更简洁一些,但经过一些实验后,这似乎不能很好地处理多个进程。 (在进程崩溃时,我找不到让 DTrace 附加 gdb
的方法;您只能在 proc::postsig:signal-handle
进程已经崩溃。)
你可以在你的模块中做这样的事情:
% echo 'c' > continue.txt
% osascript -e 'tell app "Terminal" to do script "gdb -x continue.txt attach <pid>"'
这将为每个 httpd
进程打开一个单独的终端窗口。
您也可以从外部启动 gdb
,使用脚本(DTrace 或其他方式)监视 httpd
进程,并使用 SIGSTOP
模块代码中 QA1573 的方法等待脚本注意到新的 httpd
。
关于c - 如何让 Mac OS X CrashReporter 调用调试器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532207/