.NET-Debuggererweiterungen
Mit den .NET-Debuggererweiterungen können Sie Informationen zu Code anzeigen, der innerhalb der .NET-Laufzeit ausgeführt wird, sowohl bei Liveprozessen als auch bei Dumps. Die Erweiterungen werden mit Windbgvorinstalliert und können heruntergeladen für die Verwendung mit LLDB heruntergeladen werden. Sie können die .NET-Debuggererweiterungen verwenden, um:
- Sammeln Sie Informationen zum verwalteten Heap.
- Suchen Sie nach Heapbeschädigungen.
- Zeigt interne Datentypen an, die von der Laufzeit verwendet werden.
- Zeigen Sie Informationen zu allen verwalteten Code an, der innerhalb der Laufzeit ausgeführt wird.
Die .NET-Debuggererweiterungen enthalten Befehle aus den vorhandenen dotnet-sos Tool sowie neue Befehle. Eine begrenzte Gruppe von Befehlen wird jetzt auch für die native AOT-Laufzeit unterstützt.
Syntax
Unter Windbg: ![command] [options]
Unter LLDB: sos [command] [options]
Viele der Befehle verfügen über Aliase oder Tastenkombinationen unter LLDB: clrstack [options]
Befehle
Die folgende Befehlstabelle ist auch unter Hilfe- oder soshelp-verfügbar. Einzelne Befehlshilfe steht mit soshelp <command>
zur Verfügung.
Befehl | Beschreibung |
---|---|
bpmd [-nofuturemodule] [<Modulname><Methodenname>] [-md<MethodDesc >] -list-clear<ausstehende Haltepunktnummer>-clearall |
Erstellt einen Haltepunkt an der angegebenen Methode im angegebenen Modul. Wenn das angegebene Modul und die angegebene Methode nicht geladen wurden, wartet dieser Befehl auf eine Benachrichtigung, dass das Modul geladen und just-in-time (Just-in-Time, JIT) kompiliert wurde, bevor ein Haltepunkt erstellt wird. Sie können die Liste der ausstehenden Haltepunkte mithilfe der optionen -list, -clearund -clearall verwalten: Die Option -list generiert eine Liste aller ausstehenden Haltepunkte. Wenn ein ausstehender Haltepunkt über eine Nichtzero-Modul-ID verfügt, ist dieser Haltepunkt spezifisch für eine Funktion in diesem bestimmten geladenen Modul. Wenn der ausstehende Haltepunkt über eine Nullmodul-ID verfügt, gilt dieser Haltepunkt für Module, die noch nicht geladen wurden. Verwenden Sie die Option -clear oder -clearall, um ausstehende Haltepunkte aus der Liste zu entfernen. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Stellt nur eine Stapelablaufverfolgung von verwaltetem Code bereit. Die Option -p zeigt Argumente für die verwaltete Funktion an. Die Option -l zeigt Informationen zu lokalen Variablen in einem Frame an. Die .NET-Debuggererweiterungen können keine lokalen Namen abrufen, sodass die Ausgabe für lokale Namen im Format <lokalen Adresse>=<Wert>ist. Die option -a ist eine Verknüpfung für -l- und -p kombiniert. Mit der Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn der Debugger die Option SYMOPT_LOAD_LINES angegeben hat, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt bei erfolgreicher Ausführung den entsprechenden Quelldateinamen und die entsprechende Zeilennummer an. Der Parameter -n (Keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren. Die option -f (Vollmodus) zeigt die nativen Frames an, die sie mit den verwalteten Frames und dem Assemblynamen und Funktionsoffset für die verwalteten Frames mischen. Diese Option zeigt keine nativen Frames an, wenn sie mit dotnet-dump verwendet werden.Mit der option -r werden die Register für jeden Stapelframe abbilden. Die option -all option dumps the stacks of all the managed threads.the -all option dumps the stacks of all the managed threads. |
COMState- | Listet das COM-Apartmentmodell für jeden Thread und einen Context Zeiger auf, falls verfügbar. Dieser Befehl wird nur unter Windows unterstützt. |
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <Arrayobjektadresse> -oder- DA [-start<startIndex>] [-length<length>] [-details] [-nofields] Arrayobjektadresse> |
Untersucht Elemente eines Arrayobjekts. Die Option -start gibt den Startindex an, an dem Elemente angezeigt werden sollen. Die Option -length gibt an, wie viele Elemente angezeigt werden sollen. Die Option -details zeigt Details des Elements mithilfe der DumpObj- und DumpVC- Formate an. Die Option -nofields verhindert, dass Arrays angezeigt werden. Diese Option ist nur verfügbar, wenn die Option -details angegeben ist. |
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type<partielle Typname>] [-waiting] [-roots] | DumpAsync durchläuft den garbage-collected heap und sucht nach Objekten, die asynchrone Zustandscomputer darstellen, wie erstellt, wenn der Status einer asynchronen Methode an den Heap übertragen wird. Dieser Befehl erkennt asynchrone Zustandscomputer, die als async void , async Task , async Task<T> , async ValueTask und async ValueTask<T> definiert sind.Die Ausgabe enthält einen Detailblock für jedes gefundene asynchrone Zustandsautomatobjekt. Zu diesen Details gehören: - Eine Zeile für den Typ des asynchronen Zustandsautomatenobjekts, einschließlich seiner MethodTable-Adresse, seiner Objektadresse, seiner Größe und seines Typnamens. - Eine Zeile für den Typ des Zustandsautomaten, wie im Objekt enthalten. - Eine Auflistung der einzelnen Felder auf dem Zustandsautomaten. - Eine Zeile für eine Fortsetzung von diesem Zustandsautomatenobjekt, wenn mindestens ein Objekt registriert wurde. - Erkannte GC-Wurzeln für dieses asynchrone Zustandsautomatobjekt. Unterstützt für native AOT-Anwendungen. |
DumpAssembly<Assemblyadresse> | Zeigt Informationen zu einer Assembly an. Der DumpAssembly Befehl listet mehrere Module auf, sofern vorhanden. Sie können eine Assemblyadresse mithilfe des Befehls DumpDomain abrufen. |
DumpClass<EEClass-Adresse> | Zeigt Informationen zur EEClass Struktur an, die einem Typ zugeordnet ist.Der Befehl DumpClass zeigt statische Feldwerte an, zeigt jedoch keine nicht statischen Feldwerte an. Verwenden Sie den Befehl DumpMT, DumpObj, Name2EEoder Token2EE Befehl, um eine EEClass Strukturadresse abzurufen. |
DumpDomain [<Domänenadresse>] | Listet jedes Assembly Objekt auf, das innerhalb der angegebenen AppDomain-Objektadresse geladen wird. Wenn der Befehl "Dump Domain" ohne Parameter aufgerufen wird, werden mit dem Befehl |
DumpHeap [-stat] [-strings] [-short] [-min<Größe>] [-max<Größe>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<partielle Typname>] [start [end]] | Zeigt Informationen zu den gesammelten Heap- und Sammlungsstatistiken zu Objekten an. Der befehl DumpHeap- zeigt eine Warnung an, wenn eine übermäßige Fragmentierung im Garbage Collector-Heap erkannt wird. Die Option -stat beschränkt die Ausgabe auf die Statistische Typzusammenfassung. Die Option -strings beschränkt die Ausgabe auf eine Zusammenfassung des statistischen Zeichenfolgenwerts. Die option -short beschränkt die Ausgabe auf die Adresse jedes Objekts. Mit diesem Befehl können Sie die Ausgabe des Befehls ganz einfach an einen anderen Debuggerbefehl zur Automatisierung übermitteln. Die Option -min ignoriert Objekte, die kleiner als der size Parameter sind, der in Byte angegeben ist.Die Option -max ignoriert Objekte, die größer als der parameter size sind, der in Byte angegeben ist.Die -thinlock- Option meldet ThinLocks. Weitere Informationen finden Sie im Befehl SyncBlk. Die option -startAtLowerBound erzwingt, dass der Heap-Walk an der unteren Grenze eines angegebenen Adressbereichs beginnt. Während der Planungsphase ist der Heap häufig nicht beschreibbar, da Objekte verschoben werden. Diese Option erzwingt DumpHeap-, den Fußweg an der angegebenen unteren Grenze zu beginnen. Sie müssen die Adresse eines gültigen Objekts als untere Grenze angeben, damit diese Option funktioniert. Sie können Speicher an der Adresse eines ungültigen Objekts anzeigen, um die nächste Methodentabelle manuell zu finden. Wenn sich die Garbage Collection derzeit in einem Aufruf von memcopy befindet, können Sie möglicherweise auch die Adresse des nächsten Objekts finden, indem Sie die Größe der Startadresse hinzufügen, die als Parameter angegeben wird.Die Option -mt listet nur die Objekte auf, die der angegebenen MethodTable Struktur entsprechen.Die option -type option listet nur die Objekte auf, deren Typname eine Teilzeichenfolgenüberstimmung der angegebenen Zeichenfolge ist. Der parameter start beginnt mit der Auflistung der angegebenen Adresse.Der end Parameter beendet die Auflistung an der angegebenen Adresse.Unterstützt für native AOT-Anwendungen. |
DumpIL<Managed DynamicMethod-Objekt> | <DynamicMethodDesc-Zeiger> | <MethodDesc-Zeiger> | Zeigt die allgemeine Zwischensprache (CIL) an, die einer verwalteten Methode zugeordnet ist. Dynamische CIL wird anders als CIL ausgegeben, die aus einer Assembly geladen wird. Dynamische CIL bezieht sich auf Objekte in einem verwalteten Objektarray und nicht auf Metadatentoken. |
DumpLock [--allthreads] [--waits] | Zeigt Informationen zu System.Threading.Lock-Objekten an, z. B. von Threads (Standard) oder von Threads gewarteten Objekten. |
DumpLog [-addr<addressOfStressLog>] [<Filename>] | Schreibt den Inhalt eines Speicherstressprotokolls in die angegebene Datei. Wenn Sie keinen Namen angeben, erstellt dieser Befehl eine Datei namens StressLog.txt im aktuellen Verzeichnis. Das In-Memory-Stressprotokoll hilft Ihnen, Stressfehler zu diagnostizieren, ohne Sperren oder E/A zu verwenden. Um das Stressprotokoll zu aktivieren, legen Sie die folgenden Registrierungsschlüssel unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrameworkfest: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 Mit der optionalen option -addr können Sie ein anderes Stressprotokoll als das Standardprotokoll angeben.Unterstützt für native AOT-Anwendungen. |
DumpMD-<MethodDesc-Adresse> | Zeigt Informationen zu einer MethodDesc Struktur an der angegebenen Adresse an.Sie können den Befehl IP2MD- verwenden, um die MethodDesc Strukturadresse aus einer verwalteten Funktion abzurufen. |
DumpMT- [-MD] <MethodTable-Adresse> | Zeigt Informationen zu einer Methodentabelle an der angegebenen Adresse an. Wenn Sie die Option -MD- angeben, wird eine Liste aller methoden angezeigt, die mit dem Objekt definiert sind. Jedes verwaltete Objekt enthält einen Methodentabellenzeiger. |
DumpModule [-mt] <Moduladresse> | Zeigt Informationen zu einem Modul an der angegebenen Adresse an. Die Option -mt zeigt die in einem Modul definierten Typen und die Typen an, auf die vom Modul verwiesen wird. Sie können die DumpDomain- oder DumpAssembly-Befehl verwenden, um die Adresse eines Moduls abzurufen. |
DumpObj [-nofields] <Objektadresse> -oder- DO<Objektadresse> |
Zeigt Informationen zu einem Objekt an der angegebenen Adresse an. Der Befehl DumpObj zeigt die Felder, die EEClass Strukturinformationen, die Methodentabelle und die Größe des Objekts an.Sie können den Befehl DumpStackObjects verwenden, um die Adresse eines Objekts abzurufen. Sie können den Befehl DumpObj auf Feldern vom Typ CLASS ausführen, da sie auch Objekte sind.Die option - nofields verhindert, dass Felder des angezeigten Objekts angezeigt werden, es ist nützlich für Objekte wie String. |
DumpRuntimeTypes | Zeigt die Laufzeittypobjekte im Garbage Collector-Heap an und listet die zugehörigen Typnamen und Methodentabellen auf. |
DumpStack [-EE] [-n] [top Stack [bottom Stack]] |
Zeigt eine Stapelablaufverfolgung an. Die Option -EE- bewirkt, dass der Befehl DumpStack nur verwaltete Funktionen anzeigt. Verwenden Sie die Parameter top und bottom , um die auf x86-Plattformen angezeigten Stapelframes einzuschränken.Mit der Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn der Debugger die Option SYMOPT_LOAD_LINES angegeben hat, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt bei erfolgreicher Ausführung den entsprechenden Quelldateinamen und die entsprechende Zeilennummer an. Der Parameter -n (Keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren. |
DumpSig<sigaddr><moduleaddr> | Zeigt Informationen zu einer Sig Struktur an der angegebenen Adresse an. |
DumpSigElem<sigaddr><moduleaddr> | Zeigt ein einzelnes Element eines Signaturobjekts an. In den meisten Fällen sollten Sie DumpSig- verwenden, um einzelne Signaturobjekte zu betrachten. Wenn eine Signatur jedoch in irgendeiner Weise beschädigt wurde, können Sie DumpSigElem- verwenden, um die gültigen Teile davon zu lesen. |
DumpStackObjects [-verify] [top Stack [bottom Stack]]-oder- DSO- [-verify] [ top stack [bottom stack]] |
Zeigt alle verwalteten Objekte an, die innerhalb der Grenzen des aktuellen Stapels gefunden wurden. Die Option -verify überprüft jedes nicht statische CLASS Feld eines Objektfelds.Verwenden Sie den befehl DumpStackObject mit Stapelablaufverfolgungsbefehlen wie K (windbg) oder bt (lldb) zusammen mit dem Befehl clrstack, um die Werte lokaler Variablen und Parameter zu bestimmen. |
DumpVC<MethodTable-Adresse><Address> | Zeigt Informationen zu den Feldern einer Wertklasse an der angegebenen Adresse an. Der MethodTable--Parameter ermöglicht dem Befehl DumpVC- die ordnungsgemäße Interpretation von Feldern. Wertklassen verfügen nicht über eine Methodentabelle als erstes Feld. |
EEHeap [-gc] [-loader] | Zeigt Informationen zum Prozessspeicher an, der von internen Laufzeitdatenstrukturen verbraucht wird. Die optionen -gc und -loader beschränken die Ausgabe dieses Befehls auf Garbage Collector- oder Loader-Datenstrukturen. Die Informationen für den Garbage Collector listet die Bereiche der einzelnen Segmente im verwalteten Heap auf. Wenn der Zeiger innerhalb eines Segmentbereichs liegt, der von -gcangegeben wird, ist der Zeiger ein Objektzeiger. |
EEStack [-short] [-EE] | Führt den Befehl DumpStack für alle Threads im Prozess aus. Die Option -EE- wird direkt an den befehl DumpStack übergeben. Der parameter -short beschränkt die Ausgabe auf die folgenden Threadstypen: Threads, die eine Sperre übernommen haben. Threads, die blockiert wurden, um eine Garbage Collection zuzulassen. Threads, die sich derzeit in verwaltetem Code befinden. |
EHInfo [<MethodDesc address>] [<Code address>] | Zeigt die Ausnahmebehandlungsblöcke in einer angegebenen Methode an. Mit diesem Befehl werden die Codeadressen und Offsets für den Klauselblock (der try -Block) und den Handlerblock (der catch -Block) angezeigt. |
häufig gestellte Fragen | Zeigt häufig gestellte Fragen an. In dotnet-dump nicht unterstützt. |
FinalizeQueue [-detail] | [-allReady] [-short] | Zeigt alle objekte an, die für die Fertigstellung registriert sind. Die Option -Detail- zeigt zusätzliche Informationen zu allen SyncBlocks an, die bereinigt werden müssen, sowie alle RuntimeCallableWrappers (RCWs), die auf die Bereinigung warten. Beide Datenstrukturen werden beim Ausführen des Finalizerthreads zwischengespeichert und bereinigt.Mit der Option -allReady werden alle Objekte angezeigt, die für die Fertigstellung bereit sind, unabhängig davon, ob sie bereits von der Garbage Collection als solche gekennzeichnet sind oder von der nächsten Garbage Collection markiert werden. Die Objekte, die sich in der Liste "Bereit für die Finalisierung" befinden, sind finalisierbare Objekte, die nicht mehr gewurzelt sind. Diese Option kann teuer sein, da überprüft wird, ob alle Objekte in den endgültigen Warteschlangen noch gewurzelt sind.Die option -short beschränkt die Ausgabe auf die Adresse jedes Objekts. Wenn sie mit -allReady-verwendet wird, listet sie alle Objekte auf, die einen Finalizer aufweisen, der nicht mehr gewurzelt ist. Wenn sie unabhängig verwendet wird, werden alle Objekte in den finalisierbaren und "bereit für die Finalisierung"-Warteschlangen aufgelistet. |
FindAppDomain<Objektadresse> | Bestimmt die Anwendungsdomäne eines Objekts an der angegebenen Adresse. |
FindRoots-gen<N> | -gen alle |<Objektadresse> | Bewirkt, dass der Debugger in der nächsten Auflistung der angegebenen Generation im Debuggee umgebrochen wird. Der Effekt wird zurückgesetzt, sobald der Umbruch auftritt. Um die nächste Sammlung aufzubrechen, müssen Sie den Befehl erneut anordnen. Die <Objektadresse> Form dieses Befehls wird nach dem Durchbruch verwendet, der durch die -gen- oder -gen-gen verursacht wurde, aufgetreten ist. Zu diesem Zeitpunkt befindet sich das Debuggee im richtigen Zustand für FindRoots, um Wurzeln für Objekte aus den aktuellen verurteilten Generationen zu identifizieren. Nur unter Windows unterstützt. |
GCHandles [-perdomain] | Zeigt Statistiken zu Garbage Collector-Handles im Prozess an. Die Option -perdomain ordnet die Statistiken nach Anwendungsdomäne an. Verwenden Sie den Befehl GCHandles, um Speicherlecks zu finden, die durch Garbage Collector-Speicherlecks verursacht werden. Beispielsweise tritt ein Speicherverlust auf, wenn Code ein großes Array beibehält, da ein starker Garbage Collector-Handle weiterhin darauf verweist und das Handle verworfen wird, ohne es freizugeben. Nur unter Windows unterstützt. |
GCHandleLeaks- | Sucht im Arbeitsspeicher nach verweisenden verweisenden und angehefteten Garbage Collector-Handles im Prozess und zeigt die Ergebnisse an. Wenn ein Handle gefunden wird, zeigt der befehl GCHandleLeaks die Adresse des Verweises an. Wenn ein Handle nicht im Arbeitsspeicher gefunden wird, zeigt dieser Befehl eine Benachrichtigung an. Nur unter Windows unterstützt. |
GCInfo<MethodDesc-Adresse><Codeadresse> | Zeigt Daten an, die angibt, wann Register oder Stapelspeicherorte verwaltete Objekte enthalten. Wenn eine Garbage Collection auftritt, muss der Sammler die Speicherorte von Verweisen auf Objekte kennen, damit sie mit neuen Objektzeigerwerten aktualisiert werden können. |
GCRoot [-nostacks] [-all] <Objektadresse> | Zeigt Informationen zu Verweisen (oder Wurzeln) an einem Objekt an der angegebenen Adresse an. Der befehl GCRoot untersucht den gesamten verwalteten Heap und die Handletable für Handles innerhalb anderer Objekte und Handles im Stapel. Jeder Stapel wird dann nach Zeigern auf Objekte gesucht, und die Finalizer-Warteschlange wird ebenfalls durchsucht. Dieser Befehl bestimmt nicht, ob ein Stapelstamm gültig ist oder verworfen wird. Verwenden Sie die befehle clrstack und U, um den Frame zu zerlegen, zu dem der lokale Wert oder der Argumentwert gehört, um festzustellen, ob der Stapelstamm noch verwendet wird. Die Option -nostacks beschränkt die Suche auf Garbage Collector Handles und erreichbare Objekte. Die option -all erzwingt, dass alle Wurzeln anstelle der einzigartigen Wurzeln angezeigt werden. |
GCWhere<Objektadresse> | Zeigt die Position und Größe im Heap der Garbage Collection des übergebenen Arguments an. Wenn das Argument im verwalteten Heap liegt, aber keine gültige Objektadresse ist, wird die Größe als 0 (Null) angezeigt. |
Hilfe (soshelp) [<Befehl>] [faq ] |
Zeigt alle verfügbaren Befehle an, wenn kein Parameter angegeben wird, oder zeigt detaillierte Hilfeinformationen zum angegebenen Befehl an. Der parameter faq zeigt Antworten auf häufig gestellte Fragen an. |
HeapStat [-inclUnrooted | -iu] | Zeigt die Generierungsgrößen für jeden Heap und den gesamten freien Speicherplatz in jeder Generation auf jedem Heap an. Wenn die Option -inclUnrooted angegeben ist, enthält der Bericht Informationen zu den verwalteten Objekten aus dem Garbage Collection-Heap, der nicht mehr gestammt ist. Nur unter Windows unterstützt. |
HistClear | Gibt alle Ressourcen frei, die von der Familie von Hist -Befehlen verwendet werden.Im Allgemeinen müssen Sie HistClear nicht explizit aufrufen, da jede HistInit die vorherigen Ressourcen bereinigt. |
HistInit | Initialisiert die SOS-Strukturen aus dem Stressprotokoll, das im Debuggee gespeichert wurde. |
HistObj<obj_address> | Untersucht alle Stressprotokollverlagerungsdatensätze und zeigt die Kette von Garbage Collection-Verlagerungen an, die möglicherweise zu der als Argument übergebenen Adresse geführt haben. |
HistObjFind<obj_address> | Zeigt alle Protokolleinträge an, die auf ein Objekt an der angegebenen Adresse verweisen. |
HistRoot<Stamm-> | Zeigt Informationen im Zusammenhang mit Werbeaktionen und Verlagerungen des angegebenen Stammes an. Der Stammwert kann verwendet werden, um die Bewegung eines Objekts über die Garbage Collections nachzuverfolgen. |
IP2MD- (ip2md-) <Codeadresse> | Zeigt die MethodDesc Struktur an der angegebenen Adresse im Code an, der JIT-kompiliert wurde. |
ListNearObj (lno) <obj_address> | Zeigt die objekte vor und nach der angegebenen Adresse an. Der Befehl sucht nach der Adresse im Garbage Collection-Heap, die wie ein gültiger Anfang eines verwalteten Objekts (basierend auf einer gültigen Methodentabelle) und das Objekt nach der Argumentadresse aussieht. Nur unter Windows unterstützt. |
MinidumpMode [0] [1] | Verhindert das Ausführen unsicherer Befehle bei Verwendung eines Minidumps. Übergeben Sie 0, um dieses Feature zu deaktivieren, oder 1, um dieses Feature zu aktivieren. Standardmäßig ist der MinidumpMode-wert auf 0festgelegt. Minidumps, die mit dem Befehl .dump /m oder .dump--Befehl erstellt wurden, verfügen über eingeschränkte CLR-spezifische Daten und ermöglichen es Ihnen, nur eine Teilmenge von SOS-Befehlen ordnungsgemäß auszuführen. Einige Befehle können mit unerwarteten Fehlern fehlschlagen, da erforderliche Speicherbereiche nicht zugeordnet sind oder nur teilweise zugeordnet sind. Diese Option schützt Sie vor dem Ausführen unsicherer Befehle für Minidumps. Nur unterstützt mit Windbg. |
Name2EE- (name2eee) <Modulname><Typ- oder Methodennamens> -oder- Name2EE<Modulname>!<Typ- oder Methodenname> |
Zeigt die MethodTable Struktur und EEClass Struktur für den angegebenen Typ oder die angegebene Methode im angegebenen Modul an.Das angegebene Modul muss im Prozess geladen werden. Um den richtigen Typnamen zu erhalten, durchsuchen Sie das Modul mithilfe der Ildasm.exe (IL Disassembler). Sie können auch * als Modulnamenparameter übergeben, um alle geladenen verwalteten Module zu durchsuchen. Der Modulname Parameter kann auch der Name des Debuggers für ein Modul sein, z. B. mscorlib oder image00400000 .Dieser Befehl unterstützt die Windows-Debuggersyntax von < module >! <type >. Der Typ muss vollqualifizierter sein. |
ObjSize [<Objektadresse>] | [-Aggregat] [-stat] | Zeigt die Größe des angegebenen Objekts an. Wenn Sie keine Parameter angeben, zeigt der Befehl ObjSize die Größe aller Objekte an, die in verwalteten Threads gefunden wurden, zeigt alle Garbage Collector-Handles im Prozess an und summiert die Größe aller Objekte, auf die von diesen Handles verwiesen wird. Der Befehl ObjSize enthält zusätzlich zum übergeordneten Element die Größe aller untergeordneten Objekte. Die option -aggregate kann mit dem argument -stat verwendet werden, um eine detaillierte Ansicht der Typen zu erhalten, die noch verwurzelt sind. Mit !dumpheap -stat und !objsize -aggregate -statkönnen Sie bestimmen, welche Objekte nicht mehr gewurzelt sind und verschiedene Speicherprobleme diagnostizieren. Nur unter Windows unterstützt. |
PrintException [-geschachtelte] [-lines] [<Exception-Objektadresse>] -oder- PE [-geschachtelte] [<Exception-Objektadresse>] |
Zeigt Felder aller Objekte an, die von der Exception Klasse an der angegebenen Adresse abgeleitet sind, und formatiert sie. Wenn Sie keine Adresse angeben, zeigt der Befehl PrintException die letzte Ausnahme an, die im aktuellen Thread ausgelöst wird. Die Option -geschachtelte zeigt Details zu geschachtelten Ausnahmeobjekten an. Mit der Option -lines werden ggf. Quellinformationen angezeigt. Mit diesem Befehl können Sie das _stackTrace -Feld formatieren und anzeigen, bei dem es sich um ein binäres Array handelt. |
ProcInfo [-env] [-time] [-mem] | Zeigt Umgebungsvariablen für den Prozess, die Kernel-CPU-Zeit und die Arbeitsspeicherauslastungsstatistiken an. Nur unterstützt mit Windbg. |
RCWCleanupList<RCWCleanupList-Adresse> | Zeigt die Liste der aufrufbaren Laufzeitwrapper an der angegebenen Adresse an, die auf die Bereinigung wartet. Nur unterstützt mit Windbg. |
SaveModule<Basisadresse><Dateinamen> | Schreibt ein Bild, das in den Arbeitsspeicher an der angegebenen Adresse geladen wird, in die angegebene Datei. Nur unterstützt mit Windbg. |
SetHostRuntime [<Laufzeitverzeichnis>] | Mit diesem Befehl wird der Pfad zur .NET-Laufzeit festgelegt, um den verwalteten Code zu hosten, der als Teil von SOS im Debugger (LLDB) ausgeführt wird. Die Laufzeit muss mindestens Version 2.1.0 oder höher sein. Wenn im Verzeichnis Leerzeichen vorhanden sind, muss es sich um ein einfaches Anzeichen (') handelt. Normalerweise versucht SOS, eine installierte .NET-Runtime zu finden, um den verwalteten Code automatisch auszuführen, aber dieser Befehl ist verfügbar, wenn er fehlschlägt. Standardmäßig wird dieselbe Laufzeit (libcoreclr) verwendet, die gedebuggt wird. Verwenden Sie diesen Befehl, wenn die zu debuggende Standardlaufzeit nicht ausreicht, um den SOS-Code auszuführen oder wenn die Version kleiner als 2.1.0 ist. Wenn Sie beim Ausführen eines SOS-Befehls die folgende Fehlermeldung erhalten haben, verwenden Sie diesen Befehl, um den Pfad auf 2.1.0 oder höher .NET-Laufzeit festzulegen. (lldb) clrstack Error: Fail to initialize CoreCLR 80004005 ClrStack failed (lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6 Sie können die "dotnet --info" in einer Befehlsshell verwenden, um den Pfad einer installierten .NET-Laufzeit zu finden. |
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-) cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] | Aktiviert den Support für den Symbolserver, der heruntergeladen wird. Die Option -ms ermöglicht das Herunterladen vom öffentlichen Microsoft-Symbolserver. Die Option -disable aktiviert die Unterstützung für den Symboldownload. Die Option -cache<Cachepfad> gibt ein Symbolcacheverzeichnis an. Der Standardwert ist $HOME/.dotnet/symbolcache, falls nicht angegeben. Die Option -directory- fügt einen Pfad zum Suchen nach Symbolen hinzu. Kann mehrere sein. Die option -sympath fügt Server-, Cache- und Verzeichnispfade im Windows-Symbolpfadformat hinzu. Die Option -log- aktiviert die Symboldownloadprotokollierung. Die option -loadsymbols option versucht, die systemeigenen .NET-Symbole für die Laufzeit herunterzuladen. Wird auf lldb und dotnet-dump unterstützt. |
SOSFlush- | Löscht einen internen SOS-Cache. |
SOSStatus- [-reset] | Zeigt den internen SOS-Status an oder setzt den internen zwischengespeicherten Zustand zurück. |
StopOnException [-abgeleitete] [-create | -create2] <Ausnahme><Pseudoregisternummer> | Bewirkt, dass der Debugger beendet wird, wenn die angegebene Ausnahme ausgelöst wird, aber weiterhin ausgeführt wird, wenn andere Ausnahmen ausgelöst werden. Die vom abgeleitete Option fängt die angegebene Ausnahme und jede Ausnahme ab, die von der angegebenen Ausnahme abgeleitet wird. Nur unterstützt mit Windbg. |
SyncBlk [-all | <syncblk number>] | Zeigt die angegebene SyncBlock Struktur oder alle SyncBlock Strukturen an. Wenn Sie keine Argumente übergeben, zeigt der befehl SyncBlk die SyncBlock Struktur an, die Objekten entspricht, die einem Thread gehören.Eine SyncBlock Struktur ist ein Container für zusätzliche Informationen, die nicht für jedes Objekt erstellt werden müssen. Sie kann COM-Interoperabilitätsdaten, Hashcodes und Sperrinformationen für threadsichere Vorgänge enthalten. |
ThreadPool- | Zeigt Informationen zum verwalteten Threadpool an, einschließlich der Anzahl der Arbeitsanforderungen in der Warteschlange, der Anzahl der Abschlussportthreads und der Anzahl der Zeitgeber. |
Threads (clrthreads) [-live] [-special] | Zeigt alle verwalteten Threads im Prozess an. Der Befehl Threads zeigt die Debugger-Kurzhand-ID, die CLR-Thread-ID und die Betriebssystemthread-ID an. Darüber hinaus zeigt der Befehl Threads eine Spalte "Domäne" an, die die Anwendungsdomäne angibt, in der ein Thread ausgeführt wird, eine APT-Spalte, in der der COM-Apartmentmodus angezeigt wird, und eine Ausnahmespalte, in der die letzte Ausnahme im Thread angezeigt wird. Die Option -live- zeigt Threads an, die einem Livethread zugeordnet sind. Die Option -special zeigt alle speziellen Threads an, die von der CLR erstellt wurden. Zu den speziellen Threads gehören Garbage Collection-Threads (in gleichzeitiger und Server garbage Collection), Debuggerhilfsthreads, Finalizer-Threads, AppDomain Entladethreads und Threadpool-Timerthreads. Unterstützt für native AOT-Anwendungen. |
ThreadState <Statuswertfeld> | Zeigt den Status des Threads an. Der value -Parameter ist der Wert des felds State in der ausgabe Threads Berichts. |
Token2EE<Modulname><Tokennamen> | Wandelt das angegebene Metadatentoken im angegebenen Modul in eine MethodTable Struktur oder MethodDesc Struktur um.Sie können * für den Modulnamenparameter übergeben, um zu ermitteln, was dieses Token in jedem geladenen verwalteten Modul zugeordnet ist. Sie können auch den Namen des Debuggers für ein Modul übergeben, z. B. mscorlib oder image00400000 . |
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <Codeadresse> | Zeigt eine kommentierte Demontage einer verwalteten Methode an, die entweder durch einen MethodDesc Strukturzeiger für die Methode oder durch eine Codeadresse innerhalb des Methodentexts angegeben wird. Der Befehl U zeigt die gesamte Methode von Anfang bis Ende mit Anmerkungen an, mit denen Metadatentoken in Namen konvertiert werden.Die Option -gcinfo- bewirkt, dass der Befehl U die GCInfo Struktur für die Methode anzeigt.Die option -ehinfo zeigt Ausnahmeinformationen für die Methode an. Sie können diese Informationen auch mit dem Befehl EHInfo abrufen. Mit der Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn der Debugger die Option SYMOPT_LOAD_LINES angegeben hat, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt bei erfolgreicher Ausführung den entsprechenden Quelldateinamen und die entsprechende Zeilennummer an. Sie können die Option -n angeben, um dieses Verhalten zu deaktivieren. |
VerifyHeap- | Überprüft den Garbage Collector-Heap auf Anzeichen von Beschädigungen und zeigt alle gefundenen Fehler an. Heap-Beschädigungen können durch Plattformaufrufe verursacht werden, die falsch erstellt wurden. Unterstützt für native AOT-Anwendungen. |
VerifyObj<Objektadresse> | Überprüft das Objekt, das als Argument für Anzeichen einer Beschädigung übergeben wird. Nur unter Windows unterstützt. |
VMMap- | Durchläuft den virtuellen Adressraum und zeigt den Typ des Schutzes an, der auf die einzelnen Regionen angewendet wird. Nur unterstützt mit Windbg. |
VMStat- | Bietet eine Zusammenfassungsansicht des virtuellen Adressraums, sortiert nach jedem Schutztyp, der auf diesen Speicher angewendet wird (frei, reserviert, zugesichert, privat, zugeordnet, Bild). In der Spalte SUMME wird das Ergebnis der SPALTE MITTELWERT angezeigt, die mit der Spalte BLK COUNT multipliziert wird. Nur unterstützt mit Windbg. |
Windows-Debugger
Sie können die .NET-Debuggererweiterungen auch verwenden, indem Sie sie in den WinDbg/dbg-Debugger und Ausführen von Befehlen im Windows-Debugger laden. Die Befehle können für Liveprozesse oder Dumps verwendet werden.
Windbg sollte die Erweiterung automatisch laden, wenn der zu debuggende Prozess die .NET-Laufzeit enthält (coreclr.dll oder libcoreclr.so).
LLDB-Debugger
Anweisungen zum Konfigurieren der .NET-Debuggererweiterungen für LLDB finden Sie unter dotnet-debugger-extensions. Die Befehle können für Liveprozesse oder Dumps verwendet werden.
Standardmäßig können Sie alle Befehle erreichen, indem Sie folgendes eingeben: sos [command_name]
. Die allgemeinen Befehle wurden jedoch als Alias versehen, sodass Sie das präfix sos
nicht benötigen:
Befehl | Funktion |
---|---|
analyzeoom |
Zeigt die Informationen des letzten OOM an, das in einer Zuordnungsanforderung an den GC-Heap aufgetreten ist. |
bpmd |
Erstellt einen Haltepunkt an der angegebenen verwalteten Methode im angegebenen Modul. |
clrmodules |
Listet die verwalteten Module im Prozess auf. |
clrstack |
Stellt nur eine Stapelablaufverfolgung von verwaltetem Code bereit. |
clrthreads |
Listet die verwalteten Threads auf, die ausgeführt werden. |
clru |
Zeigt eine kommentierte Demontage einer verwalteten Methode an. |
dbgout |
Aktiviert/deaktiviert (-off ) interne SOS-Protokollierung. |
dso |
Zeigt alle verwalteten Objekte an, die innerhalb der Grenzen des aktuellen Stapels gefunden wurden. |
dumpalc |
Zeigt Details zu einem sammelbaren AssemblyLoadContext an, in den das angegebene Objekt geladen wird. |
dumparray |
Zeigt Details zu einem verwalteten Array an. |
dumpasync |
Zeigt Informationen zu asynchronen Zustandscomputern auf dem garbage-collected heap an. |
dumpassembly |
Zeigt Details zu einer Assembly an. |
dumpclass |
Zeigt Informationen zur EEClass Struktur an der angegebenen Adresse an. |
dumpconcurrentdictionary |
Zeigt gleichzeitigen Wörterbuchinhalt an. |
dumpconcurrentqueue |
Zeigt gleichzeitigen Warteschlangeninhalt an. |
dumpdelegate |
Zeigt Informationen zu einer Stellvertretung an. |
dumpdomain |
Zeigt Informationen zu allen Assemblys innerhalb aller AppDomains oder des angegebenen Assemblys an. |
dumpgcdata |
Zeigt Informationen zu den GC-Daten an. |
dumpgen |
Zeigt Heap-Inhalt für die angegebene Generation an. |
dumpheap |
Zeigt Informationen zu den gesammelten Heap- und Sammlungsstatistiken zu Objekten an. |
dumpil |
Zeigt die allgemeine Zwischensprache (CIL) an, die einer verwalteten Methode zugeordnet ist. |
dumplock |
Zeigt Informationen zu System.Threading.Lock-Objekten an, z. B. von Threads (Standard) oder von Threads gewarteten Objekten. Dieser Befehl ist nur in .NET-Debuggererweiterungen verfügbar. |
dumplog |
Schreibt den Inhalt eines Speicherstressprotokolls in die angegebene Datei. |
dumpmd |
Zeigt Informationen zur MethodDesc Struktur an der angegebenen Adresse an. |
dumpmodule |
Zeigt Informationen zum Modul an der angegebenen Adresse an. |
dumpmt |
Zeigt Informationen zur Methodentabelle an der angegebenen Adresse an. |
dumpobj |
Zeigt Informationen an, die das Objekt an der angegebenen Adresse enthält. |
dumpruntimetypes |
Sucht alle System.RuntimeType-Objekte im GC-Heap und druckt den Typnamen und die MethodTable, auf die sie verweisen. |
dumpsig |
Dumps the signature of a method or field specified by <sigaddr> <moduleaddr> . |
dumpsigelem |
Gibt ein einzelnes Element eines Signaturobjekts ab. |
dumpstack |
Zeigt eine systemeigene und verwaltete Stapelablaufverfolgung an. |
dumpstackobjects |
Zeigt alle verwalteten Objekte an, die innerhalb der Grenzen des aktuellen Stapels gefunden wurden. |
dumpvc |
Zeigt Informationen zu den Feldern einer Wertklasse an. |
eeheap |
Zeigt Informationen zum Prozessspeicher an, der von internen Laufzeitdatenstrukturen verbraucht wird. |
eestack |
Führt dumpstack für alle Threads im Prozess aus. |
eeversion |
Zeigt Informationen über die Laufzeit- und SOS-Versionen an. |
ehinfo |
Zeigt die Ausnahmebehandlungsblöcke in einer JIT-ed-Methode an. |
finalizequeue |
Zeigt alle objekte an, die für die Fertigstellung registriert sind. |
findappdomain |
Versucht, die AppDomain eines GC-Objekts aufzulösen. |
findroots |
Sucht und zeigt Objektwurzeln in GC-Auflistungen an. |
gchandles |
Zeigt Statistiken zu Garbage Collector-Handles im Prozess an. |
gcheapstat |
Zeigt Statistiken zum Garbage Collector an. |
gcinfo |
Zeigt die JIT GC-Codierung für eine Methode an. |
gcroot |
Zeigt Informationen zu Verweisen (oder Wurzeln) an das Objekt an der angegebenen Adresse an. |
gcwhere |
Zeigt die Position im GC-Heap der angegebenen Adresse an. |
histclear |
Gibt alle Ressourcen frei, die von der Familie der Hist-Befehle verwendet werden. |
histinit |
Initialisiert die SOS-Strukturen aus dem Stressprotokoll, das im Debuggee gespeichert wurde. |
histobj |
Untersucht alle Stressprotokollverlagerungsdatensätze und zeigt die Kette von Garbage Collection-Verlagerungen an, die möglicherweise zu der als Argument übergebenen Adresse geführt haben. |
histobjfind |
Zeigt alle Protokolleinträge an, die auf das Objekt an der angegebenen Adresse verweisen. |
histroot |
Zeigt Informationen im Zusammenhang mit Werbeaktionen und Verlagerungen des angegebenen Stammes an. |
histstats |
Zeigt Stressprotokollstatistiken an. |
ip2md |
Zeigt die MethodDesc Struktur an der angegebenen Adresse im Code an, der JIT-kompiliert wurde. |
listnearobj |
Zeigt das vorangehende objekt und die angegebene Adresse an. |
loadsymbols |
Lädt die .NET nativen Modulsymbole. |
logging |
Aktiviert/deaktiviert die interne SOS-Protokollierung. |
name2ee |
Zeigt die MethodTable - und EEClass Strukturen für den angegebenen Typ oder die angegebene Methode im angegebenen Modul an. |
objsize |
Zeigt die Größe des angegebenen Objekts an. |
parallelstacks |
Zeigt den zusammengeführten Threads-Stapel ähnlich wie im Bereich "Parallele Stapel" von Visual Studio an. |
pathto |
Zeigt den GC-Pfad von <root> zu <target> an. |
pe |
Zeigt Felder aller Objekte an, die von der Exception Klasse an der angegebenen Adresse abgeleitet sind, und formatiert sie. |
printexception |
Zeigt Felder aller Objekte an, die von der Exception Klasse an der angegebenen Adresse abgeleitet sind, und formatiert sie. |
runtimes |
Listet die Laufzeiten im Ziel auf oder ändert die Standardlaufzeit. |
stoponcatch |
Der Zielprozess wird beim nächsten Abfangen einer verwalteten Ausnahme während der Ausführung abgebrochen. |
setclrpath |
Legt den Pfad zum Laden von Coreclr dac/dbi-Dateien fest.
setclrpath <path> . |
sethostruntime |
Legt das .NET-Laufzeitverzeichnis fest, das zum Ausführen von verwaltetem Code in SOS verwendet werden soll, oder zeigt es an. |
setsymbolserver |
Aktiviert die Unterstützung des Symbolservers. |
setsostid |
Legt den aktuellen TID/Threadindex des Betriebssystems fest, anstatt die llDB-Bereitstellung zu verwenden.
setsostid <tid> <index> . |
sos |
Führt verschiedene Coreclr-Debuggingbefehle aus. Verwenden Sie die Syntax sos <command-name> <args> . Weitere Informationen finden Sie unter "soshelp". |
soshelp |
Zeigt alle verfügbaren Befehle an, wenn kein Parameter angegeben wird, oder zeigt detaillierte Hilfeinformationen zum angegebenen Befehl an: soshelp <command> . |
syncblk |
Zeigt die SyncBlock-Halterinformationen an. |
taskstate |
Zeigt einen Vorgangsstatus in einem lesbaren Format an. |
threadpool |
Zeigt Informationen zum Laufzeitthreadpool an. |
threadpoolqueue |
Zeigt Arbeitsaufgaben für den Threadpool in der Warteschlange an. |
threadstate |
Ziemlich druckt die Bedeutung eines Threads-Zustands. |
timerinfo |
Zeigt Informationen zur Ausführung von Timern an. |
token2ee |
Zeigt die MethodTable-Struktur und methodDesc-Struktur für das angegebene Token und Modul an. |
traverseheap |
Schreibt Heap-Informationen in eine Datei in einem format, das vom CLR Profiler verstanden wird. |
verifyheap |
Überprüft den GC-Heap auf Anzeichen einer Beschädigung. |
verifyobj |
Überprüft das Objekt, das als Argument für Anzeichen einer Beschädigung übergeben wird. |
Beispielverwendung für Windbg/cdb
Befehl | Beschreibung |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Zeigt den Inhalt eines Arrays an der Adresse 00ad28d0 an. Die Anzeige beginnt mit dem zweiten Element und wird für fünf Elemente fortgesetzt. |
!dumpassembly 1ca248 |
Zeigt den Inhalt einer Assembly an der Adresse 1ca248 an. |
!dumpheap |
Zeigt Informationen zum Garbage Collector-Heap an. |
!DumpLog |
Schreibt den Inhalt des Speicherstressprotokolls in eine (Standard)Datei namens StressLog.txt im aktuellen Verzeichnis. |
!dumpmd 902f40 |
Zeigt die MethodDesc Struktur an der Adresse 902f40 an. |
!dumpmodule 1caa50 |
Zeigt Informationen zu einem Modul an der Adresse 1caa50 an. |
!DumpObj a79d40 |
Zeigt Informationen zu einem Objekt an der Adresse a79d40 an. |
!DumpVC 0090320c 00a79d9c |
Zeigt die Felder einer Wertklasse an der Adresse 00a79d9c mithilfe der Methodentabelle an der Adresse 0090320c an. |
!eeheap -gc |
Zeigt den vom Garbage Collector verwendeten Prozessspeicher an. |
!finalizequeue |
Zeigt alle Objekte an, die für die Fertigstellung geplant sind. |
!findappdomain 00a79d98 |
Bestimmt die Anwendungsdomäne eines Objekts an der Adresse 00a79d98 . |
!gcinfo 5b68dbb8 |
Zeigt alle Garbage Collector-Handles im aktuellen Prozess an. |
!name2ee unittest.exe MainClass.Main |
Zeigt die MethodTable - und EEClass Strukturen für die Main -Methode in der Klasse MainClass im Modul unittest.exe an. |
!token2ee unittest.exe 02000003 |
Zeigt Informationen zum Metadatentoken an der Adresse 02000003 im Modul unittest.exe an. |
Verwendung von LLDB-Beispielen
Befehl | Beschreibung |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Zeigt den Inhalt eines Arrays an der Adresse 00ad28d0 an. Die Anzeige beginnt mit dem zweiten Element und wird für fünf Elemente fortgesetzt. |
dumpassembly 1ca248 |
Zeigt den Inhalt einer Assembly an der Adresse 1ca248 an. |
dumpheap |
Zeigt Informationen zum Garbage Collector-Heap an. |
dumplog |
Schreibt den Inhalt des Speicherstressprotokolls in eine (Standard)Datei namens StressLog.txt im aktuellen Verzeichnis. |
dumpmd 902f40 |
Zeigt die MethodDesc Struktur an der Adresse 902f40 an. |
dumpmodule 1caa50 |
Zeigt Informationen zu einem Modul an der Adresse 1caa50 an. |
dumpobj a79d40 |
Zeigt Informationen zu einem Objekt an der Adresse a79d40 an. |
dumpvc 0090320c 00a79d9c |
Zeigt die Felder einer Wertklasse an der Adresse 00a79d9c mithilfe der Methodentabelle an der Adresse 0090320c an. |
eeheap -gc |
Zeigt den vom Garbage Collector verwendeten Prozessspeicher an. |
findappdomain 00a79d98 |
Bestimmt die Anwendungsdomäne eines Objekts an der Adresse 00a79d98 . |
gcinfo 5b68dbb8 |
Zeigt alle Garbage Collector-Handles im aktuellen Prozess an. |
name2ee unittest.exe MainClass.Main |
Zeigt die MethodTable - und EEClass Strukturen für die Main -Methode in der Klasse MainClass im Modul unittest.exe an. |
token2ee unittest.exe 02000003 |
Zeigt Informationen zum Metadatentoken an der Adresse 02000003 im Modul unittest.exe an. |
clrthreads |
Zeigt die verwalteten Threads an. |