我试图在GDB中捕获浮点异常(SIGFPE),而不是将其传递给进程并继续调试。 我给了gdb这个:
handle SIGFPE stop nopass
当SIGFPE发生时,GDB停在正确的位置。问题是我不能也不知道如何继续调试。 我试过给GDB
continue
或
signal 0
但它仍然挂在违规行上并拒绝继续。
有没有办法在收到信号后继续调试?
我正在使用GDB 7.5.1,我已经编译了自己,我也尝试过使用我的12.04 Ubuntu发行版附带的GDB 7.4。两者都有相同的行为。
答案 0 :(得分:7)
问题在于,当您在同步信号之后继续执行程序时,它会重新执行导致信号的相同指令,这意味着您将再次获取信号。如果你告诉它忽略信号(直接或通过gdb),它将进入一个紧密循环重复执行该指令。
如果要在导致信号的指令后实际继续执行程序,则需要在发出$pc
命令之前手动将continue
寄存器设置为下一个(或其他)指令