首页 文章

GDB:将EXC_BAD_ACCESS信号传递给程序

提问于
浏览
2

注意:这个问题源自我提出的关于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

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

相关问题