1

このコードを .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 コマンドの後に続行することが不可能になるためです。

4

0 に答える 0