Zugreifen auf globale Variablen
Die Namen der globalen 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. Daher können Sie alle Befehle verwenden, die unter Zugreifen auf Arbeitsspeicher nach virtueller Adresse beschrieben werden, um globale Variablen zu lesen oder zu schreiben.
Darüber hinaus können Sie die ? (Evaluate-Ausdruck) -Befehl, um die Adresse anzuzeigen, die einem beliebigen Symbol zugeordnet ist.
WinDbg stellt Benutzeroberflächenelemente bereit, die Sie (zusätzlich zu Befehlen) verwenden können, um globale Variablen anzuzeigen und zu bearbeiten. Weitere Informationen finden Sie unter Anzeigen und Bearbeiten von globalen Variablen in WinDbg (klassisch).
Betrachten Sie das folgende Beispiel. Angenommen, Sie möchten die globale Variable untersuchen, bei der MyCounter
es sich um eine 32-Bit-Ganzzahl handelt. Nehmen wir 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 von 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, d. h. die Dezimalversion dieser Adresse. Die meisten C-Programmierer verwenden jedoch lieber 0x0012FEDC.) Der zweite Befehl teilt Ihnen mit, dass der Wert von MyCounter 0x52 (dezimal 82) ist.
Sie können diese Schritte auch im folgenden Befehl ausführen.
0:000> dd MyCounter L1
0012fedc 00000052
Verwenden Sie den folgenden Befehl, um den Wert von MyCounter
in dezimal 83 zu ändern.
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 d\* -Befehls ist jedoch immer noch im Hexadezimalformat.
0:000> dd MyCounter L1 0012fedc 00000053