3

注意:这个问题源于我问过的关于 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 信号或至少退出程序) .

4

1 回答 1

0

这是一个解决方法,使用设置句柄所有打印通过 nostop 并监视错误流,如果您看到类似的行Program received signal ...,请终止进程 gdb-arm-apple-darwin

于 2012-12-28T05:34:13.583 回答