Runtime Debugger-Tool (Cordbg.exe)

Aktualisiert: November 2007

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:

attach

Führt die Anwendungsdomänen im Prozess auf und fordert den Benutzer zum Auswählen der anzufügenden Domäne auf.

detach

Führt die Anwendungsdomänen im Prozess auf und fordert den Benutzer zum Auswählen der zu trennenden Domäne auf.

0

Führt die Anwendungsdomänen im Prozess auf.

1

Führt die Anwendungsdomänen und Assemblys im Prozess auf.

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:

e[xceptions] [exception type]

Das Tool fügt den Ausnahmetyp einer Liste mit Ausnahmen (erste Chance) hinzu, die abgefangen werden sollen. Wenn Sie keinen Ausnahmetyp angeben, fängt das Tool alle Ausnahmen (erste Chance) ab. Beim Ausnahmetyp wird Groß-/Kleinschreibung unterschieden, z. B. System.ArgumentException.

u[nhandled]

Nicht behandelte Ausnahmen

c[lass]

Ladeereignisse für Klassen

m[odule]

Ladeereignisse für Module

t[hread]

Threadstartereignisse

conn[ect] machine_nameport

Für Projekte für intelligente Geräte.

Stellt eine Verbindung zu einem Remotegerät her, das eine .NET Compact Framework-Anwendung ausführt.

ParameterDefinition
machine_nameErforderlich. Der Name oder die IP-Adresse des Remotecomputers.
Anschluss Erforderlich. Der Anschluss, der für die Herstellung der Verbindung zu dem Remotecomputer verwendet wird.

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.

a6zb7c8d.alert_note(de-de,VS.90).gifHinweis:
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:

e[xceptions] [exception type]

Das Tool fügt den Ausnahmetyp einer Liste mit Ausnahmen (erste Chance) hinzu, die ignoriert werden sollen. Wenn Sie keinen Ausnahmetyp angeben, ignoriert das Tool alle Ausnahmen (erste Chance). Beim Ausnahmetyp wird Groß-/Kleinschreibung unterschieden, z. B. System.ArgumentException.

u[nhandled]

Nicht behandelte Ausnahmen

c[lass]

Ladeereignisse für Klassen

m[odule]

Ladeereignisse für Module

t[hread]

Threadstartereignisse

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:

mod

Führt die geladenen Module im Prozess auf.

cl

Führt die geladenen Klassen im Prozess auf.

fu

Führt globale Funktionen für die einzelnen Module im Prozess auf.

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 newpath-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".

setipline 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.

xmodulename !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.

Tipp

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 Windows Software Development Kit (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]

Siehe auch

Referenz

.NET Framework-Tools

SDK-Eingabeaufforderung