未解決のブレークポイント (bu ブレークポイント)

まだ読み込まれていないルーチン名に対してブレークポイントが設定されている場合、そのブレークポイントは、遅延仮想、または未解決のブレークポイントと呼ばれます (これらの用語は同じ意味で使用されます)。未解決のブレークポイントは、モジュールの特定の読み込みに関連付けられていません。 新しいアプリケーションが読み込まれるたびに、このルーチン名がチェックされます。 このルーチンが出現した場合、デバッガーは仮想ブレークポイントの実際のコード化されたアドレスを計算し、ブレークポイントを有効にします。

bu コマンドを使用してブレークポイントを設定すると、ブレークポイントは自動的に未解決と見なされます。 読み込まれたモジュール内にこのブレークポイントが存在する場合、ブレークポイントは引き続き有効になり、正常に機能します。 ただし、モジュールが後でアンロードされから再読み込みされても、このブレークポイントは消えません。 一方、bp を使用して設定したブレークポイントは、即座にアドレスに解決されます。

bp ブレークポイントと bu ブレークポイントには、主に 3 つの違いがあります。

  • bp ブレークポイントの位置は常にアドレスに変換されます。 モジュールの変更により、bp ブレークポイントが設定されたコードが移動した場合でも、ブレークポイントは同じアドレスに残ります。 一方、bu ブレークポイントは、使用されたシンボリック値 (通常はシンボルとオフセット) に関連付けられたままであり、アドレスが変更されてもこのシンボリック位置を追跡します。

  • 読み込まれたモジュールで bp ブレークポイントのアドレスが見つかり、そのモジュールが後でアンロードされた場合、ブレークポイントはブレークポイント リストから削除されます。 一方、bu ブレークポイントは、アンロードと読み込みを繰り返しても残ります。

  • bp で設定したブレークポイントは WinDbg ワークスペースには保存されません。 bu で設定したブレークポイントはワークスペースに保存されます。

アドレス ブレークポイントと未解決のブレークポイントの制御

アドレス ブレークポイントは、bp (ブレークポイントの設定) コマンド、または /d スイッチが含まれている場合は bm (シンボル ブレークポイントの設定) コマンドを使用して作成できます。 未解決のブレークポイントは、bu (未解決のブレークポイントの設定) コマンド、または /d スイッチが含まれていない場合は bm コマンドを使用して作成できます。 ブレークポイントの無効化、有効化、および変更を実行するコマンドは、あらゆる種類のブレークポイントに適用されます。 ブレークポイントのリストを表示するコマンドには、すべてのブレークポイントが含まれており、それぞれの種類も示されます。 これらコマンドのリストについては、「ブレークポイントを制御する方法」を参照してください。

WinDbg の [ブレークポイント] ダイアログ ボックスにはすべてのブレークポイントが表示され、未解決のブレークポイントは "u" という表記で示されます。 このダイアログ ボックスを使用して、ブレークポイントを変更できます。このダイアログ ボックスの [コマンド] テキスト ボックスを使用すると、任意の種類のブレークポイントを作成できます。種類を省略した場合、未解決のブレークポイントが作成されます。 詳細については、「編集 | ブレークポイント」を参照してください。 WinDbg の [逆アセンブリ] ウィンドウまたは [ソース] ウィンドウでマウスを使用してブレークポイントを設定すると、デバッガーにより未解決のブレークポイントが作成されます。