注意:这个问题源于我问过的关于 iPhone 启动的另一个问题:Launch installed app on tethered iPhone
我有一种情况需要捕获所有信号,特别是 EXC_BAD_ACCESS 以在崩溃处理程序中使用。当 GDB 连接到进程时,它会处理信号并中断,而不是让程序处理它。
GDB 具有handle all noprint pass nostop
应该将所有信号传递给程序而不是中断的命令。这适用于我尝试过的所有信号,除了 EXC_BAD_ACCESS,即使它列在其信号列表中。
现在i386 Darwin 6.3.5版本的GDB也有这个命令了dont-handle-bad-access 1
。如果我打开它并触发信号,GDB 会成功传递在程序中变成 SIGBUS 的信号。
现在是我问题的症结所在。我正在连接的 iPhone 上进行远程调试。使用的 GDB 版本是 ARMV7 6.3.5 版本,遗憾的是没有该dont-handle-bad-access
命令。如果我打开handle all noprint pass nostop
命令并触发崩溃,则调试器会挂起,如果我将其保留为默认值,则调试器会捕获信号并且永远不会进入我的信号处理程序。
有没有办法让这个版本的 GDB 正确传递 EXC_BAD_ACCESS 信号,或者有没有办法在任何类型的崩溃或中断时触发操作(在这种情况下,我可以发出 SIGBUS 信号或至少退出程序) .