Auswerten von Ausdrücken
Der Debugger versteht zwei verschiedene Ausdrucksformen: MASM-Ausdrücke und C++-Ausdrücke.
Microsoft Macro Assembler(MASM)-Ausdrücke werden in den Beispielen in dieser Hilfedokumentation verwendet, sofern nicht anders angegeben. In MASM-Ausdrücken werden alle Symbole als Adressen behandelt.
C++-Ausdrücke sind identisch mit denen, die im tatsächlichen C++-Code verwendet werden. In diesen Ausdrücken werden Symbole als geeignete Datentypen verstanden.
Wenn jede Syntax verwendet wird
Sie können den Standardauswertungsauswerter für Ausdrücke auf eine der folgenden Arten auswählen:
Verwenden Sie die _NT_EXPR_EVAL Umgebungsvariable, bevor der Debugger gestartet wird.
Verwenden Sie die Befehlszeilenoption-ee {masm|c++}, wenn der Debugger gestartet wird.
Verwenden Sie den Befehl .expr (Ausdrucksauswertung auswählen), um die Ausdrucksauswertung anzuzeigen oder zu ändern, nachdem der Debugger ausgeführt wird.
Wenn Sie keine der vorherigen Methoden verwenden, verwendet der Debugger den MASM-Ausdrucksauswerter.
Wenn Sie einen Ausdruck auswerten möchten, ohne den Debuggerstatus zu ändern, können Sie den verwenden. (Ausdruck auswerten) Befehl.
Alle Befehle und Debuginformationsfenster interpretieren ihre Argumente mit den folgenden Ausnahmen über den Standardauswertungsauswerter:
Der ?? (Evaluieren des C++-Ausdrucks) der Befehl verwendet immer den C++-Ausdrucksauswerter.
Das Überwachungsfenster verwendet immer den C++-Ausdrucksauswerter.
Im Fenster Locals wird immer der C++-Ausdrucksauswerter verwendet.
Einige Erweiterungsbefehle verwenden immer den MASM-Ausdrucksauswerter (und andere Erweiterungsbefehle akzeptieren nur numerische Argumente anstelle von vollständigen Ausdrücken).
Wenn ein Teil eines Ausdrucks in Klammern eingeschlossen ist und Sie vor dem Ausdruck zwei Zeichen (@@) einfügen, wird der Ausdruck vom Ausdrucksauswerter ausgewertet, der in diesem Fall normalerweise nicht verwendet wird.
Mit den beiden Vorzeichen (@@) können Sie zwei unterschiedliche Auswertungen für unterschiedliche Parameter eines einzelnen Befehls verwenden. Außerdem können Sie verschiedene Teile eines langen Ausdrucks mit unterschiedlichen Methoden bewerten. Sie können die beiden bei Schildern schachteln. Jede Darstellung der beiden Anzeichen wechselt zum anderen Ausdrucksauswerter.
Warnung Die Syntax von C++-Ausdrücken ist nützlich zum Bearbeiten von Strukturen und Variablen, eignet sich aber nicht gut als Parser für die Parameter von Debuggerbefehlen. Wenn Sie Debuggerbefehle für allgemeine Zwecke verwenden oder Debuggererweiterungen verwenden, sollten Sie die MASM-Ausdruckssyntax als Standardauswertung festlegen. Wenn Sie über einen bestimmten Parameter verfügen müssen, verwenden Sie die Syntax des@@ C++-Ausdrucks.
Weitere Informationen zu den beiden verschiedenen Ausdruckstypen finden Sie unter Numerische Ausdruckssyntax.
Zahlen in Ausdrücken
Zahlen in MASM-Ausdrücken werden entsprechend dem aktuellen Radix interpretiert. Mit dem Befehl n (Number Base festlegen) können Sie die Standardradix auf 16, 10 oder 8 festlegen. Alle Zahlen ohne Präfix werden in dieser Basis interpretiert. Der Standardradix kann überschrieben werden, indem das Präfix 0x (hexadezimal), das Präfix 0n (dezimal), das Präfix 0t (oktal) oder das Präfix 0y (binär) angegeben werden.
Zahlen in C++-Ausdrücken werden als Dezimalzahlen interpretiert, es sei denn, Sie geben anders an. Um eine hexadezimale ganze Zahl anzugeben, fügen Sie 0x vor der Zahl hinzu. Um eine oktale ganze Zahl anzugeben, fügen Sie 0 (null) vor der Zahl hinzu. (In der Ausgabe des Debuggers wird jedoch manchmal das Dezimalpräfix 0n verwendet.)
Wenn Sie eine Zahl in mehreren Basen gleichzeitig anzeigen möchten, verwenden Sie den Befehl .formats (Zahlenformate anzeigen).
Symbole in Ausdrücken
Die beiden Ausdruckstypen interpretieren Symbole unterschiedlich:
In MASM-Ausdrücken wird jedes Symbol als Adresse interpretiert. Je nachdem, worauf sich das Symbol bezieht, ist diese Adresse die Adresse einer globalen Variablen, einer lokalen Variablen, einer Funktion, eines Segments, eines Moduls oder einer anderen erkannten Bezeichnung.
In C++-Ausdrücken wird jedes Symbol entsprechend seinem Typ interpretiert. Je nachdem, auf was sich das Symbol bezieht, kann es als ganze Zahl, eine Datenstruktur, einen Funktionszeiger oder einen anderen Datentyp interpretiert werden. Ein Symbol, das nicht einem C++-Datentyp entspricht (z. B. ein nicht geänderter Modulname), erzeugt einen Syntaxfehler.
Wenn ein Symbol mehrdeutig sein kann, stellen Sie ihm den Modulnamen und ein Ausrufezeichen ( ! ) voran. Wenn der Symbolname als hexadezimale Zahl interpretiert werden könnte, stellen Sie ihm den Modulnamen und ein Ausrufezeichen ( ! ) oder nur ein Ausrufezeichen voran. Um anzugeben, dass ein Symbol lokal sein soll, lassen Sie den Modulnamen aus, und fügen Sie vor dem Symbolnamen ein Dollarzeichen und ein Ausrufezeichen ( $! ) ein. Weitere Informationen zum Interpretieren von Symbolen finden Sie unter Symbolsyntax und Symbolabgleich.
Operatoren in Ausdrücken
Jeder Ausdruckstyp verwendet eine andere Auflistung von Operatoren.
Weitere Informationen zu den Operatoren, die Sie in MASM-Ausdrücken verwenden können, und deren Rangfolgeregeln finden Sie unter MASM-Nummern und -Operatoren.
Weitere Informationen zu den Operatoren, die Sie in C++-Ausdrücken verwenden können, und deren Rangfolgeregeln finden Sie unter C++-Nummern und -Operatoren.
Denken Sie daran, dass MASM-Vorgänge immer bytebasiert sind und C++-Vorgänge C++-Typregeln (einschließlich der Skalierung der Zeigerarithmetik) folgen.
Einige Beispiele für die verschiedenen Syntaxen finden Sie unter Beispiele für gemischte Ausdrücke.