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