当调试C ++程序发出带有gdb的SIGSEGV时,可以处理该信号并要求nostop。
gdb如何处理这种情况?
已搜索过gdb源代码,无法找到起点。
答案 0 :(得分:1)
您无法自动忽略SIGSEGV。无论如何,我也不建议这样做。虽然你可以让gdb忽略信号并且不将它传递给程序,但是一旦信号处理程序返回并且导致无限循环,内核将尝试重新运行有问题的指令。有关详细信息,请参阅this answer。
解决此问题的一种方法是跳过指令或更改寄存器值,使其不会出现段错误。该链接显示了设置寄存器的示例。您还可以使用jump
命令跳过指令。
答案 1 :(得分:0)
这实际上是操作系统所做的事情。在Windows上,如果程序附加了调试器并且抛出了异常,Windows将询问调试器是否要处理它。如果/当它下降时,它将它传递给程序。如果程序没有处理它,Windows会再次将它传递给调试器。
答案 2 :(得分:0)
可以处理信号并要求nostop。
目前还不清楚你是否希望GDB处理信号或程序本身。
如果是后者,gdb handle SIGSEGV nostop noprint pass
就会这样做。