Nicht aufgelöste Haltepunkte (bu Breakpoints)

Wenn ein Haltepunkt für eine Funktion festgelegt wird, die nicht geladen wurde, wird der Haltepunkt als zeitversetzter, virtueller oder unaufgelöster Haltepunkt bezeichnet. (Diese Begriffe werden austauschbar verwendet.) Unaufgelöste Haltepunkte sind nicht mit dem Laden eines bestimmten Moduls verbunden. Jedes Mal, wenn eine neue Anwendung geladen wird, wird sie auf diesen Routinennamen geprüft. Wenn diese Funktion auftaucht, berechnet der Debugger die tatsächliche Adresse des virtuellen Haltepunkts und aktiviert den Haltepunkt.

Wenn Sie einen Haltepunkt mit dem Befehl bu festlegen, wird der Haltepunkt automatisch als nicht aufgelöst betrachtet. Wenn sich dieser Haltepunkt in einem geladenen Modul befindet, ist der Haltepunkt weiterhin aktiviert und funktioniert normal. Wenn das Modul jedoch später entladen und neu geladen wird, verschwindet dieser Haltepunkt nicht. Ein Haltepunkt, den Sie mit bp festlegen, wird dagegen sofort in eine Adresse aufgelöst.

Es gibt drei primäre Unterschiede zwischen bp-Haltepunkten und bu-Haltepunkten:

  • Ein bp-Haltepunkt wird immer in eine Adresse umgewandelt. Wenn eine Moduländerung den Code verschiebt, an dem ein bp-Haltepunkt festgelegt wurde, bleibt der Haltepunkt an der gleichen Adresse. Ein bu-Haltepunkt hingegen bleibt mit dem verwendeten symbolischen Wert (typischerweise ein Symbol plus ein Offset) verbunden und folgt diesem symbolischen Punkt, auch wenn sich seine Adresse ändert.

  • Wenn eine bp-Haltepunktadresse in einem geladenen Modul gefunden wird und dieses Modul später entladen wird, wird der Haltepunkt aus der Haltepunktliste entfernt. Andererseits bleiben bu-Haltepunkte auch nach wiederholtem Entladen und Laden bestehen.

  • Haltepunkte, die Sie mit bp festlegen, werden nicht in WinDbg-Arbeitsbereichen gespeichert. Haltepunkte, die mit bu festgelegt werden, werden in Arbeitsbereichen gespeichert.

Kontrolle von Adresshaltepunkten und nicht aufgelösten Haltepunkten

Adresshaltepunkte können mit dem Befehl bp (Haltepunkt setzen) oder dem Befehl bm (Symbolhaltepunkt setzen) erstellt werden, wenn der Schalter /d enthalten ist. Nicht aufgelöste Haltepunkte können mit dem Befehl bu (nicht aufgelösten Haltepunkt setzen) oder dem Befehl bm erstellt werden, wenn der Schalter /d nicht enthalten ist. Befehle, die Haltepunkte deaktivieren, aktivieren und modifizieren, gelten für alle Arten von Haltepunkten. Befehle, die eine Liste von Haltepunkten anzeigen, umfassen alle Haltepunkte und geben den Typ jedes einzelnen an. Eine Liste dieser Befehle finden Sie unter Methoden zur Steuerung von Haltepunkten.

Das WinDbg-Dialogfeld Breakpoints zeigt alle Haltepunkte an und kennzeichnet nicht aufgelöste Haltepunkte mit der Notation „u“. Über dieses Dialogfeld können Sie jeden Haltepunkt ändern. Mit dem Textfeld Command in diesem Dialogfeld können Sie jede Art von Haltepunkt erstellen; wird der Typ nicht angegeben, wird ein nicht aufgelöster Haltepunkt erstellt. Einzelheiten finden Sie unter Bearbeiten | Haltepunkte. Wenn Sie einen Haltepunkt mit der Maus im WinDbg Disassembly-Fenster oder Source-Fenster festlegen, erstellt der Debugger einen nicht aufgelösten Haltepunkt.