2009-05-13 3 views
5

ときどき、私のコード内の別の場所にあるさまざまなデバッグセッションから大量のブレークポイントを累積することがあります。デバッガはブレークポイントをいつ停止するかを効率的にどのように知っていますか?潜在的に長いブレークポイントのリストに対して行番号とソースファイル名をチェックするために、すべての単一行で停止することはできません。デバッガのブレークポイントはどのように効率的に実装されていますか?

これはEclipseのJavaデバッガーですが、問題はどのデバッガーにも当てはまります。

答えて

7

多くのデバッガ(私はEclipseについて知らない)で使用されている戦略は、基本的にサブルーチンコールまたはシステムコールであるブレークポイントのポイントにパッチを入れることです。にジャンプしたコードは、ブレークポイント情報を持ち、ユーザーコマンドの印刷や受け入れを行い、またパッチで上書きされたコードを持つので、ブレークポイントなしで実行を元のコードに一致させることができます。

+0

男、それは一部のヘビーデューティー魔法だ下記のリンクで1を書くこと。私はデバッガが深いことをしているのを知っていましたが、深いことはわかりませんでした! – skiphoppy

+2

必ずしも呼び出す必要はありません。可能であれば、デバッガが処理する割り込みを発生させる命令で上書きします。 –

5

はNadreckの良い答えに追加するには:

は、より多くのエキゾチックなもののいくつかを含む詳細、との記事hereあります(x86の上の特定のオペコード、ハードウェアブレークポイント)。

2

デバッガはハードウェアまたはソフトウェアでブレークポイントを実装します。後者では、元の命令を保存し、例外を生成する特別なコードを挿入し、例外が発生したときに元の命令を再挿入し、ブレークポイントがヒットしたことをユーザに知らせる必要があります。ソフトウェアのブレークポイントに関する詳細は、my articleを参照してください。

関連する問題