假设在gdb下运行的进程由于接收到信号而停止,例如
SIGSEGV
因为访问了一个无效的位置。然后,我修复位置(通过写入寄存器或以任何其他方式),并希望单步执行,重试出错的指令。
有一个命令
stepi
如果信号被忽略或一开始没有被接收到,这将起作用。但由于有信号等待处理,我不能使用它,至少不能直接使用。如果我使用
signal 0
命令,它将忽略该信号,但随后它将作为
continue
. 因此,如果我使用
信号0
,我必须找出下一条指令的起始位置,添加
tb
等等。这不太好。
另一种方法是
handle SIGSEGV ignore
然后
斯蒂皮
接着是另一个
handle
恢复其原始状态的命令。还不明白:甚至不能
define
这是一个“黑匣子”功能,因为信号处理的原始状态可能是非默认的,并且在恢复之后会遇到问题。
si
.
那么,是否有任何简单的方法可以在不继续执行的情况下删除挂起的信号?