Symbolsyntax und Symbolabgleich

Mit Symbolen können Sie Token direkt bearbeiten, die vom zu debuggenden Programm verwendet werden. Beispielsweise können Sie mit dem Befehl bp Standard einen Haltepunkt an der Funktion Standard festlegen oder die Ganzzahlvariable MyInt mit dem Befehl dd MyInt L1 anzeigen.

In vielen Fällen können Symbole als Parameter in Debuggerbefehlen verwendet werden. Dies wird für die meisten numerischen Parameter unterstützt und auch in einigen Textparametern unterstützt. Zusätzlich zu den allgemeinen Regeln für die Symbolsyntax gibt es auch Regeln für die Symbolsyntax, die in jedem dieser Fälle gelten.

Allgemeine Regeln für die Symbolsyntax

Ein Symbolname besteht aus einem oder mehreren Zeichen, beginnt aber immer mit einem Buchstaben, Unterstrich (_), Fragezeichen (?) oder Dollarzeichen ($).

Ein Symbolname kann durch einen Modulnamen qualifiziert werden. Ein Ausrufezeichen (!) trennt den Modulnamen vom Symbol (für instance mymodule!Standard). Wenn kein Modulname verwendet wird, kann dem Symbol weiterhin ein Ausrufezeichen vorangestellt werden. Die Verwendung eines Ausrufezeichens ohne Modulnamen kann besonders nützlich sein, auch für lokale Variablen, um einem Debuggerbefehl anzugeben, dass ein Parameter ein Name und keine hexadezimale Zahl ist. Beispielsweise wird die Variable fade vom Befehl dt (Anzeigetyp) als Adresse gelesen, es sei denn, ihr wird ein Ausrufezeichen vorangestellt oder die Option -n verwendet. Wenn Sie jedoch angeben möchten, dass ein Symbol lokal ist, stellen Sie ihm ein Dollarzeichen ( $ ) und ein Ausrufezeichen ( ! ) wie in $!lime voran.

Bei Symbolnamen wird die Groß-/Kleinschreibung vollständig beachtet. Dies bedeutet, dass das Vorhandensein von myInt und MyInt in Ihrem Programm von den Debuggern nicht richtig verstanden wird. Jeder Befehl, der auf eine dieser Befehle verweist, kann auf den anderen zugreifen, unabhängig davon, wie der Befehl groß geschrieben wird.

Symbolsyntax in numerischen Ausdrücken

Der Debugger versteht zwei verschiedene Arten von Ausdrücken: Microsoft Macro Assembler (MASM)-Ausdrücke und C++-Ausdrücke. Was Symbole angeht, unterscheiden sich diese beiden Syntaxformen wie folgt:

  • In MASM-Ausdrücken wird jedes Symbol als Adresse interpretiert. Je nachdem, auf was sich das Symbol bezieht, ist dies 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, worauf 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), führt zu einem Syntaxfehler.

Eine Erklärung, wann und wie die einzelnen Syntaxtypen verwendet werden, finden Sie unter Auswerten von Ausdrücken.

Wenn Sie masm-Ausdruckssyntax verwenden, sollte jedem Symbol, das als Hexadezimalzahl oder als Register interpretiert werden könnte (z. B. BadFeed, ebX), immer ein Ausrufezeichen vorangestellt werden. Dadurch wird sichergestellt, dass der Debugger sie als Symbol erkennt.

Mit dem Befehl ss (Symbolsuffix festlegen) kann das Symbolsuffix festgelegt werden. Dadurch wird der Debugger angewiesen, automatisch "A" oder "W" an einen Symbolnamen anzufügen, den er andernfalls nicht finden kann.

Viele Win32-Routinen sind sowohl in ASCII- als auch in Unicode-Versionen vorhanden. Diese Routinen haben oft ein "A" oder "W", das an das Ende ihrer Namen angefügt wird. Die Verwendung eines Symbolsuffixes unterstützt den Debugger bei der Suche nach diesen Symbolen.

Der Suffixabgleich ist standardmäßig nicht aktiv.

Symbolsyntax in Textausdrücken

Symbole können in den Textparametern einiger Befehle verwendet werden, z. B . bm (Set Breakpoint) und x (Examine Symbols).

Diese Textparameter unterstützen eine Vielzahl von Feldhaltern und Bezeichnern. Weitere Informationen finden Sie unter Zeichenfolgenplatzhaltersyntax . Zusätzlich zu den Standardzeichenfolgenplatzhaltern kann einem Textausdruck, der zum Angeben eines Symbols verwendet wird, ein führendes Unterstrich vorangestellt werden. Wenn dies mit einem Symbol übereinstimmt, behandelt der Debugger dies als beliebige Menge von Unterstrichen, sogar 0.

Das Symbolsuffix wird nicht verwendet, wenn Symbole in Textausdrücken übereinstimmen.