我正在使用垃圾收集器,无论出于何种原因,它在初始化期间生成并捕获SIGSEGV .
当然,默认情况下GDB捕获信号 . 我做的第一件事是 handle SIGSEGV pass nostop noprint 将信号传递给下级并继续进行 .
handle SIGSEGV pass nostop noprint
然而,由于分段错误在开发过程中并不笨拙,所以这很烦人,我真的希望GDB能够在不停止下级的情况下捕获它们,重新初始化处理程序并在每次开始调试时继续执行 .
这很容易使用信号钩实现,但我没有找到任何文档 .
简而言之:有没有办法只传递信号的第一次出现?
出于这个原因,新版本的gdb具有“捕获信号” . 现在你可以:
handle SIGSEGV nostop noprint pass catch signal SIGSEGV commands handle SIGSEGV stop print nopass # .. your breakpoint number here disable 1 cont end
这仍然不是完全完美的(如果你碰到第一个SEGV的“下一个”,它会干扰),但它非常好 .
1 回答
出于这个原因,新版本的gdb具有“捕获信号” . 现在你可以:
这仍然不是完全完美的(如果你碰到第一个SEGV的“下一个”,它会干扰),但它非常好 .