首页 文章

GDB:捕获信号并继续调试

提问于
浏览
3

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

handle SIGFPE stop nopass

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

continue

要么

signal 0

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

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

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

1 回答

  • 6

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

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

相关问题