我已经在我的 .gdbinit 文件中实现了此代码,以使需要停止的 gdb 命令工作(例如 x、set 等)
define hook-x
if $pince_debugging_mode == 0
interrupt
end
end
define hook-stop
if $pince_debugging_mode == 0
c &
end
end
变量的目的$pince_debugging_mode
是通知 gdb 程序是否为了调试目的而中断目标。
我担心这种设计的信号并发性:假设我们在一个地址上放置了一个断点,在等待它被触发时,我们想用 x 命令检查一些地址。x 命令执行后,hook-stop 将被执行,因为我们已经使用 x 命令停止了线程。假设在 hook-post 执行时已经到达断点,但 hook-stop 没有意识到这一点并且$pince_debugging_mode
仍然等于 0,因此它将执行c &
命令并且目标将继续。因此,由于这个并发问题,断点处的停止没有任何意义。
这个问题还没有发生过,但我怕发生的几率,即使很低,我也不想冒险。我能做些什么来避免这个可能的问题?
注意:定义 hookpost-x 是有问题的,因为每当 x 命令抛出异常时 hookpost 将不会被执行,因此在抛出异常的 x 命令之后将无法继续