0

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

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

然而,这越来越烦人,因为分段错误在开发过程中并不少见,我真的希望 GDB 能够在我不停止下级、重新初始化处理程序并在每次我开始调试时继续执行的情况下捕获它们。

使用信号挂钩很容易做到这一点,但我没有找到任何文档。

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

4

1 回答 1

2

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

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

这仍然不是完全完美的(如果您碰巧在第一个 SEGV 上“下一个”,它会干扰),但它非常好。

于 2013-08-01T21:06:22.413 回答