首页 文章

GDB传递第一个信号

提问于
浏览
0

我正在使用垃圾收集器,无论出于何种原因,它在初始化期间生成并捕获SIGSEGV .

当然,默认情况下GDB捕获信号 . 我做的第一件事是 handle SIGSEGV pass nostop noprint 将信号传递给下级并继续进行 .

然而,由于分段错误在开发过程中并不笨拙,所以这很烦人,我真的希望GDB能够在不停止下级的情况下捕获它们,重新初始化处理程序并在每次开始调试时继续执行 .

这很容易使用信号钩实现,但我没有找到任何文档 .

简而言之:有没有办法只传递信号的第一次出现?

1 回答

  • 3

    出于这个原因,新版本的gdb具有“捕获信号” . 现在你可以:

    handle SIGSEGV nostop noprint pass
    catch signal SIGSEGV
    commands
      handle SIGSEGV stop print nopass
      # .. your breakpoint number here
      disable 1
      cont
    end
    

    这仍然不是完全完美的(如果你碰到第一个SEGV的“下一个”,它会干扰),但它非常好 .

相关问题