Anzeigen und Bearbeiten lokaler Variablen in WinDbg (klassisch)
In WinDbg können Sie lokale Variablen anzeigen, indem Sie Befehle eingeben, das Fenster Lokal oder das Fenster Überwachen verwenden.
Debuggerbefehlsfenster
Sie können lokale Variablen und Parameter anzeigen, indem Sie im Debuggerbefehlsfenster den Befehl dv oder den Befehl dt eingeben.
Öffnen des Fensters "Lokal"
Im Fenster Lokal werden Informationen zu allen lokalen Variablen im aktuellen Bereich angezeigt.
Um das Fenster Lokal zu öffnen oder zu wechseln, wählen Sie im Fenster WinDbg im Menü Ansicht die Option Lokal aus. (Sie können auch ALT+3 drücken oder auf der Symbolleiste die Schaltfläche Lokal auswählen. ALT+UMSCHALT+3 schließt das Fenster Lokal.)
Der folgende Screenshot zeigt ein Beispiel für ein Lokales Fenster.
Das Fenster Lokal kann vier Spalten enthalten. Die Spalten Name und Wert werden immer angezeigt, und die Spalten Typ und Speicherort sind optional. Um die Spalten Typ und Position anzuzeigen, wählen Sie auf der Symbolleiste die Schaltflächen Typecast bzw. Speicherorte aus.
Verwenden des Fensters "Lokal"
Im Fenster Lokal können Sie die folgenden Aktionen ausführen:
In der Spalte Name wird der Name jeder lokalen Variablen angezeigt. Wenn eine Variable eine Datenstruktur ist, wird neben ihrem Namen ein Kontrollkästchen angezeigt. Aktivieren oder deaktivieren Sie das Kontrollkästchen, um die Anzeige von Strukturelementen zu erweitern oder zu reduzieren.
In der Spalte Wert wird der aktuelle Wert jeder Variablen angezeigt.
- Um einen neuen Wert für die Variable einzugeben, doppelklicken Sie auf den aktuellen Wert, und geben Sie den neuen Wert ein, oder bearbeiten Sie den alten Wert. (Die Befehle ausschneiden, kopieren und einfügen können für die Bearbeitung verwendet werden.) Sie können einen beliebigen C++-Ausdruck eingeben.
- Drücken Sie die EINGABETASTE, um den neuen Wert zu speichern.
- Um den neuen Wert zu verwerfen, drücken Sie ESC.
- Wenn Sie einen ungültigen Wert eingeben, wird der alte Wert erneut angezeigt, wenn Sie die EINGABETASTE drücken.
Ganze Zahlen vom Typ int werden als Dezimalwerte angezeigt; Ganze Zahlen vom Typ UINT werden im aktuellen Radix angezeigt. Um den aktuellen Radix zu ändern, verwenden Sie den Befehl n (Set Number Base) im Debuggerbefehlsfenster.
Die Spalte Typ (wenn sie im Fenster Lokal angezeigt wird) zeigt den aktuellen Datentyp der einzelnen Variablen an. Jede Variable wird in dem Format angezeigt, das für ihren eigenen Datentyp geeignet ist. Datenstrukturen haben ihre Typnamen in der Spalte Typ . Andere Variablentypen zeigen "Neuen Typ eingeben" in dieser Spalte an.
Wenn Sie auf "Neuen Typ eingeben" doppelklicken, können Sie den Typ umwandeln, indem Sie einen neuen Datentyp eingeben. Durch diese Umwandlung wird die aktuelle Anzeige dieser Variablen nur im Fenster Lokal geändert. Es ändert nichts im Debugger oder auf dem Zielcomputer. Wenn Sie einen neuen Wert in die Spalte Wert eingeben, wird der text, den Sie eingeben, basierend auf dem tatsächlichen Typ des Symbols analysiert, und nicht auf einen neuen Typ, den Sie möglicherweise in der Spalte Typ eingegeben haben. Wenn Sie das Fenster Lokal schließen und erneut öffnen, gehen die Datentypänderungen verloren.
Sie können auch einen Erweiterungsbefehl in der Spalte Typ eingeben. Der Debugger übergibt die Adresse des Symbols an diese Erweiterung und zeigt die resultierende Ausgabe in einer Reihe von reduzierbaren Zeilen unter der aktuellen Zeile an. Wenn das Symbol in dieser Zeile beispielsweise eine gültige Adresse für einen Threadumgebungsblock ist, können Sie !teb in die Spalte Typ eingeben, um die !teb-Erweiterung für die Adresse dieses Symbols auszuführen.
Die Spalte Location (wenn sie im Fenster Lokal angezeigt wird) zeigt den Offset der einzelnen Member einer Datenstruktur an.
Wenn eine lokale Variable ein instance einer Klasse ist, die Vtables enthält, werden in der Spalte Name die Vtables angezeigt, und Sie können die Vtables erweitern, um die Funktionszeiger anzuzeigen. Wenn eine Vtable in einer Basisklasse enthalten ist, die auf eine abgeleitete Implementierung verweist, wird die Notation _vtcast_Class angezeigt, um die Member anzugeben, die aufgrund der abgeleiteten Klasse hinzugefügt werden. Diese Member werden wie der abgeleitete Klassentyp erweitert.
Der lokale Kontext bestimmt, welche Gruppe von lokalen Variablen im Fenster Lokal angezeigt wird. Wenn sich der lokale Kontext aus irgendeinem Grund ändert, wird das Fenster Lokal automatisch aktualisiert. Standardmäßig stimmt der lokale Kontext mit der aktuellen Position des Programmzählers überein. Weitere Informationen zum Ändern des lokalen Kontexts finden Sie unter Lokaler Kontext.
Das Fenster Lokal verfügt über eine Symbolleiste, die zwei Schaltflächen (Typecast und Speicherorte) und ein Kontextmenü mit zusätzlichen Befehlen enthält. Um auf das Menü zuzugreifen, halten Sie die Titelleiste des Fensters gedrückt (oder klicken Sie mit der rechten Maustaste darauf), oder wählen Sie das Symbol in der oberen rechten Ecke des Fensters aus. Die Symbolleiste und das Menü enthalten die folgenden Schaltflächen und Befehle.
(Symbolleiste und Menü) Typecast schaltet die Anzeige der Spalte Typ ein und aus.
(Symbolleiste und Menü) Locations aktiviert und deaktiviert die Anzeige der Spalte Position .
(Nur Menü) Zeigen Sie 16-Bit-Werte als Unicode-Zeichenfolgen in diesem Fenster an. Dieser Befehl aktiviert und deaktiviert eine globale Einstellung, die sich auf das Fenster Lokal, das Überwachungsfenster und die Ausgabe des Debuggerbefehls auswirkt. Dieser Befehl entspricht der Verwendung des Befehls .enable_unicode (Unicode-Anzeige aktivieren).
(Nur Menü) Das Anzeigen von Zahlen im Standardradiix bewirkt, dass ganze Zahlen im Standardradix angezeigt werden, anstatt sie im Dezimalformat anzuzeigen. Dieser Befehl aktiviert und deaktiviert eine globale Einstellung, die sich auf das Fenster Lokal, das Überwachungsfenster und die Ausgabe des Debuggerbefehls auswirkt. Dieser Befehl entspricht der Verwendung des Befehls .force_radix_output (Radix für Ganze Zahlen verwenden).
Hinweis Der Befehl Always display numbers in default radix hat keine Auswirkungen auf lange ganze Zahlen. Lange ganze Zahlen werden im Dezimalformat angezeigt, es sei denn, der Befehl .enable_long_status (Long Integer Display aktivieren) ist festgelegt. Der Befehl .enable_long_status wirkt sich auf die Anzeige im Fenster Lokal, im Überwachungsfenster und in der Debuggerbefehlsausgabe aus. Es gibt keine Entsprechung für diesen Befehl im Menü im Fenster Lokal.
(Nur Menü) Öffnen Des Speicherfensters für den ausgewählten Wert wird ein neues angedocktes Speicherfenster geöffnet, in dem der Arbeitsspeicher ab der Adresse des ausgewählten Ausdrucks angezeigt wird.
(Nur Menü) Beim Aufrufen von dt für den ausgewählten Speicherwert wird der Befehl dt (Anzeigetyp) mit dem ausgewählten Symbol als Parameter ausgeführt. Das Ergebnis wird im Fenster Debuggerbefehl angezeigt. Die Option -n wird automatisch verwendet, um das Symbol von einer hexadezimalen Adresse zu unterscheiden. Es werden keine anderen Optionen verwendet. Beachten Sie, dass der Inhalt, der mithilfe dieser Menüauswahl erzeugt wird, mit dem Inhalt identisch ist, der beim Ausführen des dt-Befehls über die Befehlszeile erzeugt wird, aber das Format ist leicht anders.
(Nur Menü) Symbolleiste aktiviert und deaktiviert die Symbolleiste.
(Nur Menü) Andocken oder Ausdocken bewirkt, dass das Fenster in den angedockten Zustand wechselt oder verlässt.
(Nur Menü) In ein neues Dock wechseln schließt das Fenster Lokal und öffnet es in einem neuen Dock.
(Nur Menü) Als Tab-Dock-Ziel für den Fenstertyp festgelegt ist für das Fenster Lokal nicht verfügbar. Diese Option ist nur für Quell- oder Speicherfenster verfügbar.
(Nur Menü) Immer schwebend bewirkt, dass das Fenster nicht angedockt wird, auch wenn es an einen Andockort gezogen wird.
(Nur Menü) Durch Verschieben mit Frame wird das Fenster verschoben, wenn der WinDbg-Frame verschoben wird, auch wenn das Fenster abgedockt ist.
(Nur Menü) Hilfe öffnet dieses Thema in der Dokumentation Debugtools für Windows.
(Nur Menü) Schließen schließt dieses Fenster.
Das Überwachungsfenster
In WinDbg können Sie das Fenster Überwachen verwenden, um lokale Variablen anzuzeigen und zu ändern. Im Fenster Überwachen können Sie eine beliebige Liste von Variablen anzeigen. Diese Variablen können globale Variablen und lokale Variablen aus einer beliebigen Funktion enthalten. Im Fenster Überwachung werden jederzeit die Werte der Variablen angezeigt, die dem Bereich der aktuellen Funktion entsprechen. Sie können die Werte dieser Variablen auch über das Überwachungsfenster ändern.
Im Gegensatz zum Fenster Lokal ist das Überwachungsfenster nicht von Änderungen am lokalen Kontext betroffen. Nur für variablen, die im Bereich des aktuellen Programmindikators definiert sind, können ihre Werte angezeigt oder geändert werden.
Um das Fenster Überwachung zu öffnen, wählen Sie im Menü Ansicht die Option Überwachung aus. Sie können auch ALT+2 drücken oder auf der Symbolleiste die Schaltfläche Überwachen auswählen. ALT+UMSCHALT+2 schließt das Überwachungsfenster.
Der folgende Screenshot zeigt ein Beispiel für ein Überwachungsfenster.
Das Überwachungsfenster kann vier Spalten enthalten. Die Spalten Name und Wert werden immer angezeigt, und die Spalten Typ und Speicherort sind optional. Um die Spalten Typ und Position anzuzeigen, wählen Sie auf der Symbolleiste die Schaltflächen Typecast bzw. Speicherorte aus.
Weitere Informationen
Weitere Informationen zum Steuern lokaler Variablen, eine Übersicht über die Verwendung von Variablen und das Ändern des Bereichs sowie eine Beschreibung anderer speicherbezogener Befehle finden Sie unter Lesen und Schreiben von Arbeitsspeicher.