どのようにデバッガのブレークポイントを効率的に実装されていますか?
-
21-08-2019 - |
質問
時々私は私のコード内の別の場所で別のデバッグセッションからブレークポイントの大きな質量を蓄積します。ブレークポイントのために停止したときにどのようにデバッガが効率的に知っているのですか?それはおそらく、ブレークポイントの潜在的に長いリストに対して、行番号とソースファイル名を確認するために、すべての単一の行でそれをすることができ、停止することはできません?
これは、EclipseでJavaデバッガですが、私は質問がどのデバッガにも適用されると推定ます。
解決
多くのデバッガで使用される戦略は、(私は、Eclipseのことは知らない)、本質的に、サブルーチンコールやシステムコールでブレークポイントのポイントでコードにパッチを置くことです。コードは、ブレークポイント情報を有しており、どのような印刷またはユーザコマンドの受け付けず、そのコードがブレークポイントなしで、実行は、元のコードと一致するために実行することができるように、また、パッチを上書きしたコードを有しているにジャンプ
他のヒント
Nadreckの良い答えに追加するには:
は記事のは、より多くのエキゾチックなもののいくつかを含め、ここをより詳細であります(具体的なx86でオペコード、ハードウェアブレークポイント)
デバッガは、ハードウェアまたはソフトウェアにブレークポイントを実装します。後者は、元の命令を保存する例外が発生した場合に例外を発生させ、特殊なコードを挿入し、元の命令を再挿入し、ユーザーをさせる必要があり、ブレークポイントがヒットしたことを知っています。ソフトウェアブレークポイントに血みどろの詳細については、私の記事を読みます。
あなたは、Eclipseのデバッガの内部の詳細を取得することができますし、どのように、下のリンクで1を書くこと Eclipseのデバッガの
の書き方