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