このコードを .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 コマンドが実行された後、x コマンドでスレッドを停止したため、hook-stop が実行されます。そして、hook-post の実行中にブレークポイントに到達したが、hook-stop はそれを認識せず、$pince_debugging_mode
まだ 0 に等しいため、c &
コマンドを実行し、ターゲットは続行するとします。したがって、この同時実行性の問題により、ブレークポイントで停止しても意味がありません。
この問題はまだ発生していませんが、発生する可能性が非常に低いとはいえ、危険を冒したくありません。この問題を回避するにはどうすればよいですか?
注: hookpost-x の定義には問題があります。これは、x コマンドが例外をスローするたびにフックポストが実行されないため、例外をスローする x コマンドの後に続行することが不可能になるためです。