Runtime Debugger-Tool (Cordbg.exe)
Das Runtime Debugger-Tool unterstützt Anbieter von Tools und Entwickler von Anwendungen beim Finden und Beheben von Fehlern in Programmen, die für die Common Language Runtime von .NET Framework entwickelt wurden. Dieses Tool stellt mithilfe der Laufzeit-Debug-API Debugdienste bereit. Der Quellcode für Cordbg.exe wird als Beispielanwendung mitgeliefert. Entwickler können den Code studieren, um sich mit der Verwendung der Debugdienste vertraut zu machen. Gegenwärtig können Sie mit Cordbg.exe lediglich verwalteten Code debuggen. Das Debuggen von nicht verwaltetem Code wird nicht unterstützt.
Verwenden Sie zum Starten einer Cordbg.exe-Sitzung die erste Zeile der unten aufgeführten Syntax. Verwenden Sie die zweite Zeile bei der (cordbg)
-Eingabeaufforderung in einer Cordbg.exe-Sitzung.
cordbg [ProgramName[Program arguments]][optional arguments ]
command [command arguments]
Parameter
Befehl | Beschreibung | ||||||
---|---|---|---|---|---|---|---|
ap[pdomainenum] [option] |
Listet alle Anwendungsdomänen, Assemblys und Module im aktuellen Prozess auf. Wenn Sie das option-Argument nicht angeben, listet der Befehl sämtliche Anwendungsdomänen, Assemblys und Module im aktuellen Prozess auf. Nach dem Trennen bzw. Anfügen müssen Sie den Befehl go angeben, um die Ausführung fortzusetzen. Das option-Argument kann einen der folgenden Werte annehmen:
|
||||||
as[sociatesource] {s|b breakpoint id} Dateiname |
Ordnet den angegebenen Dateinamen dem aktuellen Stapelrahmenzeiger (Option s) oder dem angegebenen Haltepunkt (Option b) zu. |
||||||
a[ttach] pid |
Fügt den Debugger an einen laufenden Prozess an. Cordbg.exe bricht das gegenwärtig gedebuggte Programm ab, sofern vorhanden, und versucht, an den durch das pid-Argument angegebenen Prozess anzufügen. Die Prozess-ID pid kann im Dezimal- oder Hexadezimalformat vorliegen. |
||||||
b[reak] [[file:] line number] | [[ class::] function [:offset]] |
Legt Haltepunkte fest oder zeigt diese an. Wenn Sie keine Argumente angeben, wird eine Liste der aktuellen Haltepunkte angezeigt, andernfalls wird an der angegebenen Position ein Haltepunkt festgelegt. Sie können einen Haltepunkt an einer Zeilennummer in der aktuellen Quelldatei, an einer Zeilennummer in einer vollqualifizierten Quelldatei oder in einer Methode festlegen, die durch eine Klasse und einen optionalen Offset gekennzeichnet ist. Haltepunkte werden über die einzelnen Ausführungen in einer Sitzung hinweg beibehalten. Der Befehl stop kann wie der Befehl break verwendet werden. Cordbg.exe zeigt Haltepunkte als "ungebunden" an, wenn die angegebene Haltepunktposition nicht an Code gebunden werden kann. Wenn ein Haltepunkt ungebunden ist, bedeutet dies, dass der zugrunde liegende Code für die Haltepunktposition noch nicht geladen wurde. Dies kann eine Reihe legitimer Gründe haben, z. B. einen falsch buchstabierten Datei- oder Klassennamen (bei diesen wird Groß- und Kleinschreibung berücksichtigt). Haltepunkte sind auch dann ungebunden, wenn Sie diese vor der Ausführung einer Anwendung festlegen. Haltepunkte werden beim Laden des tatsächlichen Codes gebunden. Der Debugger versucht, beim Laden eines Moduls jeden ungebundenen Haltepunkt automatisch erneut zu binden. |
||||||
ca[tch] [event] |
Zeigt eine Liste von Ereignistypen an oder weist den angegebenen Ereignistyp an, den Debugger anzuhalten. Wenn Sie kein Argument angeben, zeigt das Tool eine Liste von Ereignistypen an, in der Ereignistypen, bei denen der Debugger angehalten wird, als “Ein“ und Ereignistypen, die ignoriert werden, als “Aus“ gekennzeichnet sind. Wenn Sie ein Argument angeben, wird der Debugger angehalten, sobald Ereignisse vom angegebenen Typ eintreten. In der Standardeinstellung wird der Debugger nur bei nicht behandelten Ausnahmeereignissen angehalten (d. h. bei Ausnahmen, die zur Behandlung weitergeleitet werden). Ereignistypen, bei denen der Debugger angehalten wird, werden über die einzelnen Ausführungen in einer Sitzung hinweg beibehalten. Verwenden Sie den Befehl ignore, wenn der Debugger einen bestimmten Ereignistyp ignorieren soll. Das event-Argument kann einen der folgenden Werte annehmen:
|
||||||
conn[ect] machine_name port |
Für Projekte für intelligente Geräte. Stellt eine Verbindung zu einem Remotegerät her, das eine .NET Compact Framework-Anwendung ausführt.
|
||||||
cont [count] |
Setzt die Ausführung des Programms fort. Wenn Sie kein Argument angeben, wird die Ausführung des Programms einmal fortgesetzt. Wenn Sie ein Argument angeben, wird die Ausführung des Programms so oft fortgesetzt, wie angegeben. Dieser Befehl ist bei der Fortsetzung der Ausführung eines Programms nützlich, wenn der Debugger durch ein Ladeereignis für Klassen, eine Ausnahme oder einen Haltepunkt angehalten wird. Der Befehl go kann wie der Befehl cont verwendet werden. |
||||||
del[ete] [breakpoint id, ...] |
Löscht Haltepunkte. Wenn Sie keine Argumente angeben, löscht das Tool alle aktuellen Haltepunkte. Wenn Sie ein oder mehrere breakpoint id-Argumente angeben, löscht das Tool die angegebenen Haltepunkte. Haltepunktbezeichner können mit den Befehlen break oder stop erhalten werden. Der Befehl remove kann wie der Befehl delete verwendet werden. |
||||||
de[tach] |
Trennt den Debugger vom aktuellen Prozess. Der Prozess wird automatisch fortgesetzt und so ausgeführt, als wäre kein Debugger angefügt. |
||||||
dis[assemble] [0xaddress][{+|-} delta] [line count] |
Zeigt systemeigene disassemblierte Anweisungen für den aktuellen Anweisungszeiger oder die aktuelle Adresse an, sofern angegeben. In der Standardeinstellung werden fünf Anweisungen angezeigt. Wenn Sie ein line count-Argument angeben, zeigt das Tool die angegebene Anzahl zusätzlicher Anweisungen vor und nach dem aktuellen Anweisungszeiger oder der aktuellen Adresse an. Der zuletzt verwendete line count bildet die Standardeinstellung für die aktuelle Sitzung. Wenn Sie ein Delta angeben, wird die angegebene Zahl dem aktuellen Anweisungszeiger oder der angegebenen Adresse für den Beginn der Disassemblierung hinzugefügt. |
||||||
d[own] [count] |
Verschiebt den Stapelrahmenzeiger im Stapel nach unten zu den vom aktuellen Rahmen zu Prüfzwecken aufgerufenen Rahmen. Wenn Sie kein Argument angeben, wird der Stapelrahmenzeiger um einen Rahmen nach unten verschoben. Wenn Sie ein Argument angeben, wird der Stapelrahmenzeiger um die angegebene Anzahl von Rahmen nach unten verschoben. Wenn Informationen auf Quellcodeebene verfügbar sind, zeigt das Tool die Quellcodezeile für den Rahmen an. Dieser Befehl wird häufig zusammen mit dem Befehl up verwendet. |
||||||
du[mp] address [count] |
Sichert einen Speicherblock und gibt diesen, entsprechend dem Modus des Debuggers, im Hexadezimal- oder Dezimalformat aus (siehe mode). Das address-Argument stellt die Adresse des Speicherblocks dar. Das count-Argument stellt die Anzahl der zu sichernden Bytes dar. |
||||||
ex[it] |
Hält den aktuellen Prozess an und beendet den Debugger. Der Befehl quit kann wie der Befehl exit verwendet werden. |
||||||
f[unceval] [class::] function [ arg0 arg1 ...argn] |
Wertet die angegebene Funktion für den aktuellen Thread aus. Das Tool speichert das neue Objekt in der Variablen $result und verwendet es ggf. in späteren Auswertungen. Gültige Argumente sind ausschließlich andere Variablen, 4-Byte-Ganzzahlen und die Konstanten Null, True und False. Hinweis Für eine Member-Funktion muss das erste Argument ein Objekt der Klasse bzw. der abgeleiteten Klasse sein, zu der die Member-Funktion gehört. |
||||||
g[o] [count] |
Siehe cont. |
||||||
h[elp] [command ...] |
Zeigt Beschreibungen zu den angegebenen Befehlen an. Wenn Sie keine Argumente angeben, zeigt Cordbg.exe eine Liste aller Befehle für den Debugger an. Der Befehl ? kann wie der Befehl help verwendet werden. |
||||||
ig[nore] [event] |
Zeigt eine Liste von Ereignistypen an oder veranlasst den Debugger, den angegebenen Ereignistyp zu ignorieren. Wenn Sie kein event-Argument angeben, zeigt das Tool eine Liste von Ereignistypen an, in der Ereignistypen, die ignoriert werden, als "Aus" und Ereignistypen, die den Debugger anhalten, als "Ein" gekennzeichnet sind. Wenn Sie ein Argument angeben, ignoriert das Tool Ereignisse vom angegebenen Typ. Verwenden Sie den Befehl catch, um für einen Ereignistyp festzulegen, dass der Debugger angehalten wird. Das event-Argument kann einen der folgenden Ereignistypen darstellen:
|
||||||
i[n] [count] |
Siehe step. |
||||||
k[ill] |
Hält den aktuellen Prozess an. Der Debugger bleibt aktiv, um weitere Befehle zu verarbeiten. |
||||||
l[ist] option |
Zeigt eine Liste geladener Module, Klassen oder globaler Funktionen an. Das option-Argument kann einen der folgenden Werte annehmen:
|
||||||
m[ode] [[mode name {0|1} ] |
Legt den entsprechenden Debuggermodus für die verschiedenen Debuggerfeatures fest und zeigt diesen an. Geben Sie zum Festlegen eines Werts den mode name und 1 für “Ein“ oder 0 für “Aus“ an. Wenn Sie kein Argument angeben, zeigt das Tool eine Liste der aktuellen Moduseinstellungen an. Diese Modi bleiben in der Windows-Registrierung während der Durchläufe von Cordbg.exe erhalten. Weitere Informationen finden Sie in der Tabelle der Modusargumente für den Debugger. |
||||||
newo[bj] class |
Erstellt ein neues Objekt unter Verwendung des aktuellen Threads. Das Tool speichert das neue Objekt in der Variablen $result und verwendet es ggf. in späteren Auswertungen. |
||||||
newobjnc class |
Erstellt mithilfe des aktuellen Threads ein neues Objekt, ohne für das Objekt einen Konstruktor auszuführen. Das neue Objekt wird auf 0 (null) initialisiert. Das Tool speichert das neue Objekt in der Variablen $result und verwendet es ggf. in späteren Auswertungen. |
||||||
news[tr] string |
Erstellt eine neue Zeichenfolge unter Verwendung des aktuellen Threads. Das Tool speichert das neue Objekt in der Variablen $result und verwendet es ggf. in späteren Auswertungen. |
||||||
n[ext] [count] |
Führt das Programm im Einzelschrittmodus bis zur nächsten Quellcodezeile aus, ohne dabei in Funktionen zu springen. Wenn Sie kein Argument angeben, führt das Tool eine Quellcodezeile als Einzelschritt aus. Wenn Sie ein Argument angeben, führt das Tool die angegebene Anzahl von Zeilen schrittweise aus. Der Befehl so kann wie der Befehl next verwendet werden. |
||||||
ns[ingle] [count] |
Führt eine oder mehrere Anweisungen des Programms im Einzelschrittmodus aus, ohne dabei in Funktionen zu springen. Wenn Sie kein Argument angeben, führt das Tool eine Anweisung als Einzelschritt aus. Wenn Sie ein count-Argument angeben, führt das Tool die angegebene Anzahl von Anweisungen schrittweise aus. |
||||||
o[ut] [count] |
Führt einen Rücksprung des Programms aus der aktuellen Funktion aus. Wenn Sie kein Argument angeben, führt das Tool einen Rücksprung für die aktuelle Funktion einmal aus. Wenn Sie ein Argument angeben, führt das Tool einen Rücksprung so oft aus, wie angegeben. |
||||||
pa[th] [new path] |
Zeigt den Pfad an, in dem nach Quelldateien und Debugsymbolen gesucht wird, oder legt diesen fest. Wenn Sie kein Argument angeben, zeigt das Tool den aktuellen Pfad an. Wenn Sie ein new path-Argument angeben, bildet dieses den neuen Pfad für die Suche nach Quelldateien und Debugsymbolen. Dieser Pfad wird über mehrere Sitzungen hinweg in der Windows-Registrierung beibehalten. |
||||||
p[rint] [variable name] |
Zeigt eine oder mehrere lokale Variablen mit den entsprechenden Werten an. Wenn Sie kein Argument angeben, zeigt das Tool alle lokalen Variablen mit den entsprechenden Werten an. Wenn Sie ein Argument angeben, zeigt das Tool nur den Wert der angegebenen lokalen Variablen an. Einzelheiten finden Sie im Abschnitt Beispiele unter Verwenden des Befehls "print". |
||||||
pro[cessenum] |
Listet alle verwalteten Prozesse und die Anwendungsdomänen in den einzelnen Prozessen auf. |
||||||
q[uit] |
Siehe exit. |
||||||
ref[reshsource] [source file] |
Lädt den Quellcode für eine angegebene Quelldatei neu. Die neu zu ladende Quelldatei muss Teil des momentan ausgeführten Programms sein. Nach dem Festlegen des Pfads für Quelldateien mit dem Befehl path können Sie fehlenden Quellcode mit dem Befehl refreshsource abrufen. |
||||||
regd[efault] [force] |
Legt Cordbg.exe als Standard-JIT-Debugger (Just-In-Time) fest. Der Befehl hat keine Auswirkungen, wenn bereits ein anderer Debugger registriert ist. Mit dem force-Argument können Sie den registrierten JIT-Debugger überschreiben. |
||||||
reg[isters] |
Zeigt den Inhalt der Register für den aktuellen Thread an. |
||||||
rem[ove] [breakpoint id, ...] |
Siehe delete. |
||||||
re[sume] [~] [tid] |
Setzt den durch das tid-Argument angegebenen Thread fort, wenn der Debugger fortgesetzt wird. Wenn Sie die Syntax mit ~ verwenden, setzt das Tool alle Threads mit Ausnahme des angegebenen Threads fort. Wenn Sie kein Argument angeben, hat der Befehl keine Auswirkung. |
||||||
r[un] [executable [args]] |
Bricht den aktuellen Prozess ab, sofern vorhanden, und startet einen neuen. Wenn Sie kein executable-Argument angeben, führt dieser Befehl das Programm aus, das zuletzt mit dem Befehl run ausgeführt wurde. Wenn Sie ein executable-Argument angeben, führt das Tool das angegebene Programm mit den optionalen args aus. Wenn Cordbg.exe Ladeereignisse für Klassen und Module sowie Threadstartereignisse ignoriert (dies entspricht der Standardeinstellung), wird das Programm bei der ersten ausführbaren Anweisung des Hauptthreads angehalten. |
||||||
set variable value |
Legt den Wert der angegebenen variable auf den angegebenen value fest. Der Wert kann ein Literal oder eine andere Variable sein. Einzelheiten finden Sie im Abschnitt Beispiele unter Verwenden des Befehls "set". |
||||||
setip line number |
Legt die nächste auszuführende Anweisung auf die angegebene line number fest. |
||||||
sh[ow] [count] |
Zeigt Quellcodezeilen an. Wenn Sie kein Argument angeben, zeigt das Tool fünf Quellcodezeilen vor und nach der aktuellen Quellcodezeile an. Wenn Sie ein Argument angeben, zeigt das Tool die angegebene Anzahl von Zeilen vor und nach der aktuellen Zeile an. Der zuletzt angegebene count bildet die Standardeinstellung für die aktuelle Sitzung. |
||||||
si [<count>] |
Siehe step. |
||||||
so [<count>] |
Siehe next. |
||||||
ss[ingle] [count] |
Führt eine oder mehrere Anweisungen des Programms im Einzelschrittmodus aus und springt dabei in Funktionen. Wenn Sie kein Argument angeben, führt das Tool nur eine Anweisung als Einzelschritt aus. Wenn Sie ein Argument angeben, führt das Tool die angegebene Anzahl von Schritten aus. |
||||||
s[tep] [count] |
Führt das Programm im Einzelschrittmodus bis zur nächsten Quellcodezeile aus und springt dabei in Funktionen. Wenn Sie kein Argument angeben, führt das Programm die nächste Zeile als Einzelschritt aus. Wenn Sie ein Argument angeben, führt das Programm die angegebene Anzahl von Zeilen schrittweise aus. Der Befehl si bzw. der Befehl in kann wie der Befehl step verwendet werden. |
||||||
stop [[file:] line number] | [[class::] function[:offset]] | [=0xaddress] |
Siehe break. |
||||||
su[spend] [~] [tid] |
Unterbricht den durch das tid-Argument angegebenen Thread, wenn der Debugger fortgesetzt wird. Wenn Sie die Syntax mit ~ verwenden, unterbricht das Tool alle Threads mit Ausnahme des angegebenen Threads. Wenn Sie kein Argument angeben, hat der Befehl keine Auswirkung. |
||||||
t[hreads] [tid] |
Zeigt eine Liste von Threads an oder legt den aktuellen Thread fest. Wenn Sie kein Argument angeben, zeigt das Tool die Liste aller Threads an, die noch aktiv sind und verwalteten Code ausgeführt haben. Wenn Sie ein Argument angeben, legt das Tool den aktuellen Thread auf den angegebenen Thread fest. |
||||||
up [count] |
Verschiebt den Stapelrahmenzeiger im Stapel nach oben zu Rahmen, die den aktuellen Rahmen zu Prüfzwecken aufgerufen haben. Wenn Sie kein Argument angeben, wird der Stapelrahmenzeiger um einen Rahmen nach oben verschoben. Wenn Sie ein Argument angeben, wird der Stapelrahmenzeiger um die angegebene Anzahl von Stapelrahmen nach oben verschoben. Wenn Informationen auf Quellcodeebene verfügbar sind, zeigt das Tool die Quellcodezeile für den Rahmen an. |
||||||
w[here] [count] |
Zeigt eine Stapelüberwachung für den aktuellen Thread an. Wenn Sie kein Argument angeben, zeigt das Tool eine vollständige Stapelüberwachung an. Wenn Sie ein Argument angeben, zeigt das Tool die angegebene Anzahl von Stapelrahmen an. |
||||||
wr[itememory] address count byte, ... |
Schreibt die angegebenen Bytes in den Zielprozess. Das address-Argument gibt die Position an, an der die Bytes geschrieben werden sollen. Das count-Argument gibt die Anzahl der zu schreibenden Bytes an. Die byte-Argumente geben an, was in den Prozess geschrieben werden soll. Wenn die Anzahl der Bytes in der Liste kleiner als das count-Argument ist, springt das Tool zurück an den Anfang der Byteliste und kopiert sie erneut. Wenn die Anzahl der Bytes in der Liste größer als das count-Argument ist, ignoriert das Tool die überzähligen Bytes. |
||||||
wt |
Führt die Anwendung anhand der systemeigenen Anweisungen aus, wobei mit der aktuellen Anweisung begonnen wird und der Verlauf der Aufrufstruktur ausgegeben wird. Das Tool gibt die Anzahl der systemeigenen Anweisungen aus, die in den einzelnen Funktionen mit der Aufrufverfolgung ausgeführt werden. Die Verfolgung wird angehalten, wenn das Tool die Rückgabeanweisung für die Funktion erreicht, in der der Befehl ursprünglich ausgeführt wurde. Nach Abschluss der Verfolgung gibt das Tool die Gesamtzahl der ausgeführten Anweisungen aus. Dieser Befehl ahmt den Befehl wt von NT Symbolic Debugger nach und kann für eine einfache Leistungsanalyse verwendet werden. Gegenwärtig zählt das Tool nur verwalteten Code. |
||||||
x modulename ! string_to_look_for |
Zeigt Symbole im angegebenen Modul an, die mit dem durch das string_to_look_for-Argument angegebenen Muster übereinstimmen. Ein im string_to_look_for-Argument angegebenes Sternchen (*) bezeichnet eine Übereinstimmung mit beliebigen Zeichen. Das Tool ignoriert alle Zeichen, die auf das Sternchen folgen. |
||||||
? [command ...] |
Siehe help. |
||||||
> filename |
Schreibt alle ausgeführten Befehle in den angegebenen filename. Wenn Sie filename nicht angeben, hält der Befehl das Schreiben von Befehlen in die Datei an. |
||||||
< filename |
Liest Befehle aus dem angegebenen filename und führt diese aus. |
Hinweis
Bei Befehlen für Cordbg.exe wird die Groß- und Kleinschreibung berücksichtigt. Darüber hinaus sind für eine Reihe von Befehlen Synonyme vorhanden, d. h., mehrere Befehle führen zu demselben Ergebnis. Sie können z. B. Haltepunkte entweder mit dem Befehl break oder mit dem Befehl stop festlegen.
Modusargumente
Sie können Modusargumente unter Verwendung der geringstmöglichen Anzahl von Zeichen festlegen, die erforderlich sind, um den Modus eindeutig zu kennzeichnen. "mode m 1" ist beispielsweise äquivalent zu "mode moduleloads 1".
Argument | Beschreibung |
---|---|
AppDomainLoads |
Zeigt Ladeereignisse für Anwendungsdomänen und Assemblys an. |
ClassLoads |
Zeigt Ladeereignisse für Klassen an. |
DumpMemoryInBytes |
Zeigt den Speicherinhalt als Bytes oder DWORDS an. |
EmbededCLR |
Legt den Debugger auf .NET Compact Framework-Anwendungen fest, die auf intelligenten Geräten ausgeführt werden. Geben Sie 1 für "Ein" oder 0 (null) für "Aus" an, um diese Einstellung festzulegen. |
EnhanceDiag |
Zeigt erweiterte Diagnoseinformationen an. |
HexDisplay |
Zeigt Zahlen im Hexadezimalformat oder Dezimalformat an. |
ILNatPrint |
Zeigt Offsets in MSIL (Microsoft Intermediate Language) und/oder in relativer, systemeigener Sprache an. |
ISAll |
Verarbeitet alle Interceptors in Einzelschritten. |
ISClinit |
Verarbeitet Klasseninitialisierungen in Einzelschritten. |
ISExceptF |
Verarbeitet Ausnahmefilter in Einzelschritten. |
ISInt |
Verarbeitet Benutzerinterceptors in Einzelschritten. |
ISPolicy |
Verarbeitet Kontextrichtlinien in Einzelschritten. |
ISSec |
Verarbeitet Sicherheitsinterceptors in Einzelschritten. |
JitOptimizations |
Gibt an, ob die JIT-Kompilierung Code generiert, der einfacher gedebuggt werden kann. |
LoggingMessages |
Zeigt Protokollmeldungen für verwalteten Code an. |
ModuleLoads |
Zeigt Ladeereignisse für Module an. |
SeparateConsole |
Gibt an, ob für den gedebuggten Prozess eine eigene Konsole bereitgestellt wird. |
ShowArgs |
Zeigt Argumente von Methoden in der Stapelüberwachung an. |
ShowModules |
Zeigt Modulnamen in der Stapelüberwachung an. |
ShowStaticsOnPrint |
Zeigt für Objekte statische Felder an. |
ShowSuperClassOnPrint |
Zeigt für Objekte den Inhalt der Basisklasse an. |
USAll |
Verarbeitet alle nicht zugeordneten Haltepunkte in Einzelschritten. |
USEpi |
Verarbeitet Methodenepiloge in Einzelschritten. |
USPro |
Verarbeitet Methodenprologe in Einzelschritten. |
USUnmanaged |
Verarbeitet nicht verwalteten Code in Einzelschritten. |
Hinweise
Sie müssen die zu debuggende Anwendung mit compilerspezifischen Flags kompilieren, die den Compiler dazu veranlassen, Debugsymbole zu generieren. Weitere Informationen über diese Flags finden Sie in der Compilerdokumentation. Optimierte Anwendungen können nach wie vor gedebuggt werden; ein Teil der Debuginformationen fehlt jedoch. Viele lokale Variablen sind beispielsweise nicht sichtbar, und die Quellcodezeilen sind ungenau.
Geben Sie nach dem Kompilieren der Anwendung an der Befehlszeile cordbg ein, um eine Debugsitzung zu beginnen, wie das folgende Beispiel veranschaulicht.
D:\Program Files\FrameworkSDK\Bin>cordbg
Microsoft (R) Common Language Runtime Test Debugger Shell. Version 2000.14.2100.0, Copyright (c) Microsoft Corp. 1998-2000
(cordbg)
Die Eingabeaufforderung (cordbg)
zeigt an, dass Sie sich im Debugger befinden.
Wenn Sie sich im Debugger befinden, rufen Sie die erforderlichen Funktionen mithilfe der Befehle und entsprechender Argumente auf.
Wenn Sie eine Debugsitzung von der Befehlszeile starten, können Sie auch den Namen der zu debuggenden Anwendung, Programmargumente sowie optionale Argumente angeben. Die optionalen Argumente von Cordbg.exe entsprechen den in Cordbg.exe verwendeten Befehlen, allerdings müssen Sie ihnen ein Ausrufezeichen (!) als Präfix voranstellen. Sie können das Ausrufezeichen als Literal in einer Zeichenfolge verwenden, wenn Sie einen umgekehrten Schrägstrich (\) als Präfix voranstellen. Dies ist bei Verwendung des Befehls x erforderlich.
Wenn ein numerisches Argument für einen Befehl mit dem Präfix 0x beginnt, geht Cordbg.exe von einem Argument im Hexadezimalformat aus. Andernfalls wird davon ausgegangen, dass das Argument im Dezimalformat vorliegt.
Den meisten Befehlen in Cordbg.exe kann ein Sternchen (*) als Präfix vorangestellt werden. Dadurch wird der Befehl für jeden verwalteten Thread im Prozess einmal ausgeführt. Der Befehl wird im Kontext des jeweiligen Threads ausgeführt. Der Befehl w[here] erweist sich durch ein vorangestelltes Sternchen als äußerst hilfreich. Durch *w wird für jeden verwalteten Thread, der ausgedruckt werden soll, beispielsweise die Stapelüberwachung ausgeführt.
Weitere Informationen über die Runtime-Debugdienste finden Sie in der Spezifikation, in der das Aktiveren der Profilerstellung und des Debuggens festgelegt ist. Darüber hinaus wird empfohlen, dass Entwickler die Spezifikationen zur Debugübersicht und zur Debugreferenz im Ordner Tools Developers Guide konsultieren, die im Lieferumfang von .NET Framework SDK enthalten sind.
Beispiele
Starten einer Cordbg.exe-Sitzung
Der folgende Befehl startet eine Cordbg.exe-Sitzung für die Anwendung MyApplication.exe
mit den Programmargumenten a
und 2
sowie folgenden optionalen Befehlen: Festlegen eines Haltepunkts in MyApplication.cs
in Zeile 42; Fortsetzen der Anwendung; Anzeigen von Symbolen in MyApplication.exe
, die der Zeichenfolge 'SomeString'
entsprechen.
cordbg MyApplication.exe a 2 !b MyApplication.cs:42 !g !x MyApplication.exe\!SomeString
Ausführen einer ausführbaren Datei in einer Cordbg.exe-Sitzung
Der folgende in einer Cordbg.exe-Sitzung (an der Eingabeaufforderung (cordbg)
) eingegebene Befehl führt die ausführbare Datei MyApplication.exe
mit den Programmargumenten a
und 2
aus.
run MyApplication.exe a 2
Verwenden des Befehls "print"
Die folgenden Befehle veranschaulichen die Verwendung der Punktnotation mit dem Befehl print, um Variablen in Objekten anzugeben.
print obj.var1
print obj1.obj2.var1
Wenn eine Klasse eine andere Klasse erweitert, zeigt der Befehl print sowohl die Felder der angegebenen Klasse als auch die Felder der Basisklasse an. Wenn z. B. Klasse m1
über die Felder a
, b
und c
verfügt sowie Klasse m2
die Klasse m1
erweitert und über die Felder d
, e
und f
verfügt, wird die Instanz myInstance
von m2
wie folgt ausgegeben.
myInstance = <addr> <m2>
a = 1
b = 2
c = 3
m2::d = 4
m2::e = 5
m2::f = 6
Sie können innerhalb einer Klasse statische Variablen angeben, indem Sie dem Variablennamen wie folgt den Klassennamen als Präfix voranstellen.
print MyClass::StaticVar1
print System::Boolean::True
Arrayindizes müssen einfache Ausdrücke sein. Die folgenden Arrayindizes sind gültige Indizes für die Verwendung mit dem Befehl print.
print arr[1]
print arr[i]
print arr1[arr2[1]]
print md[1][5][myObject.a]
Die folgenden Arrayindizes sind für die Verwendung mit dem Befehl print nicht gültig, da der Arrayindex kein einfacher Ausdruck ist.
print arr[i + 1]
print arr[i + 2]
Verwenden des Befehls "set"
Bei der Verwendung des Befehls set kann der zugeordnete Wert der angegebenen Variablen ein Literal oder eine andere Variable sein. Der Befehl set kann wie folgt verwendet werden.
set int1 0x2a
set float1 3.1415
set char1 'a'
set bool1 true
set obj1 0x12345678
set obj1 obj2
set obj1.m_length[obj1.m_height] obj3.m_length[2]