Breakpointsyntax
Die folgenden Syntaxelemente können beim Erstellen eines Haltepunkts verwendet werden, entweder über das Debuggerbefehlsfenster oder über die grafische WinDbg-Schnittstelle.
Adressen in Haltepunkten
Haltepunkte unterstützen viele Arten von Adresssyntax, einschließlich virtueller Adressen, Funktionsoffsets und Quellzeilennummern. Sie können beispielsweise einen der folgenden Befehle verwenden, um Haltepunkte festzulegen:
0:000> bp 0040108c
0:000> bp main+5c
0:000> bp `source.c:31`
Weitere Informationen zu dieser Syntax finden Sie unter Syntax für numerische Ausdrücke, Quellcodezeilensyntax und die einzelnen Befehlsthemen.
Haltepunkte für Methoden
Wenn Sie einen Haltepunkt für die MyMethod-Methode in der MyClass-Klasse festlegen möchten, können Sie zwei verschiedene Syntaxen verwenden:
In der MASM-Ausdruckssyntax können Sie eine Methode durch einen Doppelpunkt oder einen doppelten Unterstrich angeben.
0:000> bp MyClass::MyMethod 0:000> bp MyClass__MyMethod
In der Syntax des C++-Ausdrucks müssen Sie eine Methode durch einen Doppelpunkt angeben.
0:000> bp @@( MyClass::MyMethod )
Wenn Sie einen komplexeren Haltepunktbefehl verwenden möchten, sollten Sie die MASM-Ausdruckssyntax verwenden. Weitere Informationen zur Ausdruckssyntax finden Sie unter Auswerten von Ausdrücken.
Haltepunkte mit komplizierten MASM-Ausdrücken
Um einen Haltepunkt für komplizierte Funktionen festzulegen, einschließlich Funktionen, die Leerzeichen enthalten, sowie ein Element einer öffentlichen C++-Klasse, schließen Sie den Ausdruck in Klammern ein. Verwenden Sie beispielsweise bp (?? MyPublic) oder bp (Operator new).
Eine vielseitigere Technik ist die Verwendung des @!" chars"-Syntax. Dies ist ein spezielles Escapezeichen im MASM-Evaluator, mit dem Sie beliebigen Text für die Symbolauflösung bereitstellen können. Sie müssen mit den drei Symbolen "@!" beginnen und mit einem Anführungszeichen (") enden. Ohne diese Syntax können Sie keine Leerzeichen, spitzen Klammern (<, >) oder andere Sonderzeichen in Symbolnamen in der MASM-Auswertung verwenden. Diese Syntax gilt ausschließlich für Namen und nicht für Parameter. Vorlagen und Überladungen sind die primären Quellen von Symbolen, die diese Anführungszeichennotation erfordern. Sie können den Befehl bu auch mithilfe von @!" festlegen. chars"-Syntax, wie das folgende Codebeispiel zeigt.
0:000> bu @!"ExecutableName!std::pair<unsigned int,std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> > >::operator="
In diesem Beispiel ist ExecutableName der Name einer ausführbaren Datei.
Diese Escapesyntax ist für C++ (z. B. überladene Operatoren) anstelle von C nützlich, da in C-Funktionsnamen keine Leerzeichen (oder Sonderzeichen) vorhanden sind. Diese Syntax ist jedoch auch für viele verwalteten Code wichtig, da im .NET Framework erhebliche Überladungen verwendet werden.
Um einen Haltepunkt für beliebigen Text in der C++-Syntax festzulegen, verwenden Sie bu @@c++(text) für C++-kompatible Symbole.
Haltepunkte in Skripts
Breakpoint-IDs müssen nicht explizit auf verwiesen werden. Stattdessen können Sie einen numerischen Ausdruck verwenden, der in eine ganze Zahl aufgelöst wird, die einer Breakpoint-ID entspricht. Verwenden Sie die folgende Syntax, um anzugeben, dass der Ausdruck als Haltepunkt interpretiert werden soll.
b?[Expression]
In dieser Syntax sind die eckigen Klammern erforderlich, und Expression steht für jeden numerischen Ausdruck, der in eine ganze Zahl aufgelöst wird, die einer Breakpoint-ID entspricht.
Mit dieser Syntax können Debuggerskripts programmgesteuert einen Haltepunkt auswählen. Im folgenden Beispiel ändert sich der Haltepunkt abhängig vom Wert eines benutzerdefinierten Pseudoregisters.
b?[@$t0]
Breakpoint-Pseudoregister
Wenn Sie in einem Ausdruck auf eine Haltepunktadresse verweisen möchten, können Sie ein Pseudoregister mit der Syntax $bpZahl verwenden, wobei Number die Breakpoint-ID ist. Weitere Informationen zu dieser Syntax finden Sie unter Pseudo-Register Syntax.
Mehrdeutige Breakpointauflösung
In Version 10.0.25310.1001 und höher der Debugger-Engine wird jetzt eine mehrdeutige Breakpointauflösung unterstützt. Mehrdeutige Haltepunkte ermöglichen es dem Debugger, Haltepunkte in bestimmten Szenarien festzulegen, in denen ein Breakpointausdruck an mehrere Speicherorte aufgelöst wird. Weitere Informationen finden Sie unter Mehrdeutige Breakpointauflösung.