GDB:捕获信号并继续调试

GDB:捕获信号并继续调试,gdb,Gdb,我试图捕获GDB中的浮点异常(SIGFPE),而不是将其传递给进程并继续调试。 我给gdb的是: handle SIGFPE stop nopass 当发生SIGFPE时,GDB停止在正确的位置。问题是我不能也不知道如何继续调试。 我试过给GDB continue 或 但它仍然站在冒犯的立场上,拒绝继续 有没有办法在收到信号后继续调试 我正在使用GDB7.5.1,这是我自己编译的,我也尝试过GDB7.4,它是我的12.04 Ubuntu发行版附带的。两者都有相同的行为。问题在于,当您在同步信

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

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

continue

但它仍然站在冒犯的立场上,拒绝继续

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


我正在使用GDB7.5.1,这是我自己编译的,我也尝试过GDB7.4,它是我的12.04 Ubuntu发行版附带的。两者都有相同的行为。

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


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

感谢您的帮助。根据您所说的,我在收到信号后停止,然后尝试继续,然后尝试给GDB“handle SIGFPE nostop nopass”,因此在我恢复后第二次忽略该信号。但在那之后,GDB将被挂起,它甚至不能再次暂停。这将是一个非常简单的解决方案,现在我必须手动移动程序计数器。这意味着,如果不跳过指令,就无法以完全相同的方式执行程序?@Sogartar您确实以完全相同的方式执行。。。得到完全相同的结果。
signal 0