Freigeben über


Zugreifen auf globale Variablen

Die Namen globaler Variablen werden in den Symboldateien gespeichert, die beim Kompilieren einer Anwendung erstellt werden. Der Debugger interpretiert den Namen einer globalen Variablen als virtuelle Adresse. Jeder Befehl, der eine Adresse als Parameter akzeptiert, akzeptiert auch den Namen einer Variablen. Aus diesem Grund können Sie alle Befehle verwenden, die unter "Zugreifen auf den Arbeitsspeicher durch virtuelle Adresse " beschrieben werden, um globale Variablen zu lesen oder zu schreiben.

Darüber hinaus können Sie den ? (Auswerten des Ausdrucks) Befehl verwenden, um die Adresse anzuzeigen, die einem beliebigen Symbol zugeordnet ist.

WinDbg stellt Benutzeroberflächenelemente bereit, die Sie verwenden können (zusätzlich zu Befehlen), um globale Variablen anzuzeigen und zu bearbeiten. Siehe Anzeigen und Bearbeiten globaler Variablen in WinDbg (klassisch).

Betrachten Sie das folgende Beispiel. Angenommen, Sie möchten die MyCounter globale Variable untersuchen, bei der es sich um eine 32-Bit-Ganzzahl handelt. Nehmen Sie auch an, dass der Standardradiix 10 ist.

Sie können die Adresse dieser Variablen abrufen und dann wie folgt anzeigen.

0:000> ? MyCounter 
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1 
0012fedc  00000052

Die erste Befehlsausgabe teilt Ihnen mit, dass die Adresse MyCounter 0x0012FEDC ist. Sie können dann den Befehl d* (Speicher anzeigen) verwenden, um ein Doppelwort an dieser Adresse anzuzeigen. (Sie können auch 1244892 verwenden, bei dem es sich um die Dezimalversion dieser Adresse handelt. Die meisten C-Programmierer bevorzugen jedoch 0x0012FEDC.) Der zweite Befehl teilt Ihnen mit, dass der Wert von MyCounter 0x52 ist (Dezimalzahl 82).

Sie können diese Schritte auch im folgenden Befehl ausführen.

0:000> dd MyCounter L1 
0012fedc  00000052

Verwenden Sie den folgenden Befehl, damit der Wert von MyCounter in die Dezimalzahl 83 geändert wird.

0:000> ed MyCounter 83 

In diesem Beispiel wird die Dezimaleingabe verwendet, da dieses Format für eine ganze Zahl natürlicher erscheint. Die Ausgabe des Befehls "d\* " befindet sich jedoch weiterhin im Hexadezimalformat.

0:000> dd MyCounter L1 0012fedc  00000053