GDB:将EXC_BAD_ACCESS信号传递给程序

时间:2012-07-17 20:43:50

标签: iphone debugging gdb signals exc-bad-access

注意:这个问题源自我提出的关于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或至少退出该程序)。

1 个答案:

答案 0 :(得分:0)

这是一个解决方法,使用设置句柄所有打印传递nostop并监视错误流,如果你看到像Program received signal ...这样的行,则杀死进程gdb-arm-apple-darwin