GDB:捕获信号并继续调试

时间:2013-03-27 15:31:44

标签: gdb

我试图在GDB中捕获浮点异常(SIGFPE),而不是将其传递给进程并继续调试。 我给了gdb这个:

handle SIGFPE stop nopass

当SIGFPE发生时,GDB停在正确的位置。问题是我不能也不知道如何继续调试。 我试过给GDB

continue

signal 0

但它仍然挂在违规行上并拒绝继续。

有没有办法在收到信号后继续调试?

我正在使用GDB 7.5.1,我已经编译了自己,我也尝试过使用我的12.04 Ubuntu发行版附带的GDB 7.4。两者都有相同的行为。

1 个答案:

答案 0 :(得分:7)

问题在于,当您在同步信号之后继续执行程序时,它会重新执行导致信号的相同指令,这意味着您将再次获取信号。如果你告诉它忽略信号(直接或通过gdb),它将进入一个紧密循环重复执行该指令。

如果要在导致信号的指令后实际继续执行程序,则需要在发出$pc命令之前手动将continue寄存器设置为下一个(或其他)指令