6

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

handle SIGFPE stop nopass

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

continue

或者

signal 0

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

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

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

4

1 回答 1

7

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

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

于 2013-03-27T15:38:53.717 回答