SOS-Debugerweiterung

Die SOS-Debugerweiterung ermöglicht die Anzeige von Informationen zum Code, der in der .NET Core-Runtime ausgeführt wird. Dies gilt sowohl für Liveprozesse als auch für Speicherabbilder. Die Erweiterung wird bei dotnet-dump und WinDbg/dbg vorinstalliert und kann für die Nutzung mit LLDB heruntergeladen werden. Sie können die SOS-Debugerweiterung für Folgendes verwenden:

  • Sammeln von Informationen zum verwalteten Heap
  • Überprüfen des Heaps auf Beschädigungen
  • Anzeigen interner Datentypen, die von der Runtime verwendet werden
  • Anzeigen von Informationen zum gesamten verwalteten Code, der in der Runtime ausgeführt wird

Syntax

Windows

![command] [options]

Linux und macOS

sos [command] [options]

Viele Befehle besitzen in LLDB Aliase oder Tastenkombinationen:

clrstack [options]

Befehle

Die folgende Tabelle mit Befehlen ist auch unter Hilfe oder soshelp verfügbar. Hilfe zu einzelnen Befehlen ist unter soshelp <command> verfügbar.

Befehl BESCHREIBUNG
bpmd [-nofuturemodule] [<Modulname><Methodenname>] [-md<MethodDesc>] -list-clear<ausstehende Haltepunktnummer>-clearall Erstellt einen Haltepunkt bei der angegebenen Methode im angegebenen Modul.

Wenn das angegebene Modul und die entsprechende Methode nicht geladen wurden, wartet dieser Befehl vor dem Erstellen eines Haltepunkts auf die Benachrichtigung, dass das Modul geladen und JIT-kompiliert (Just-in-Time) wurde.

Sie können die Liste der ausstehenden Haltepunkte mithilfe der Optionen -list, -clear und -clearall verwalten:

Mit der Option -list wird eine Liste aller ausstehenden Haltepunkte generiert. Wenn ein ausstehender Haltepunkt eine Modul-ID ungleich 0 (null) aufweist, ist dieser Haltepunkt für eine Funktion in diesem bestimmten geladenen Modul spezifisch. Wenn die Modul-ID eines ausstehenden Haltepunkts 0 (null) lautet, gilt dieser Haltepunkt für noch nicht geladene Module.

Verwenden Sie zum Entfernen ausstehender Haltepunkte aus der Liste die Option -clear oder die Option -clearall.
CLRStack [ -a] [ -l] [ -p] [ -n] [ -f] [ -r] [ -all] Stellt eine Stapelüberwachung ausschließlich für verwalteten Code bereit.

Mit der Option -p werden Argumente zur verwalteten Funktion angezeigt.

Durch die Option -l werden Informationen zu lokalen Variablen in einem Frame angezeigt. Da von der SOS-Debugerweiterung keine lokalen Namen abgerufen werden können, weist die Ausgabe für lokale Namen das Format <lokale Adresse>=<Wert> auf.

Die Option -a kann als Tastenkombination für eine Kombination aus -l und -p verwendet werden.

Durch die Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn für den Debugger die SYMOPT_LOAD_LINES-Option angegeben wird, sucht SOS die Symbole aller verwalteten Frames und zeigt ggf. den entsprechenden Quelldateinamen und die Zeilennummer an. Der Parameter -n (keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren.

Bei dieser Option -f (Vollmodus) werden die nativen Frames zusammen mit den verwalteten Frames sowie deren Assemblyname und Offset der Funktion angezeigt. Bei Verwendung mit dotnet-dump werden bei dieser Option keine nativen Frames angezeigt.

Mit der Option -r werden die Register für die einzelnen Stapelrahmen gesichert.

Mit der Option -all werden die Stapel aller verwalteten Threads gesichert.
COMState Listet für jeden Thread das COM-Apartmentmodell und einen Context-Zeiger auf, falls verfügbar. Dieser Befehl wird nur unter Windows unterstützt.
DumpArray [-start<Startindex>] [-length<Länge>] [-details] [-nofields] <Arrayobjektadresse>

Oder

DA [-start<Startindex>] [-length<Länge>] [-details] [-nofields] Arrayobjektadresse>
Überprüft Elemente eines Arrayobjekts.

Die Option -start gibt den Startindex an, ab dem Elemente angezeigt werden sollen.

Die Option -length gibt an, wie viele Elemente angezeigt werden sollen.

Die Option -details zeigt mithilfe des DumpObj-Formats und des DumpVC-Formats Elementdetails an.

Die Option -nofields verhindert die Anzeige von Arrays. Diese Option ist nur verfügbar, wenn die Option -details angegeben ist.
DumpAsync (dumpasync) [-mt<MethodTable-Adresse>] [-type<partieller Typname>] [-waiting] [-roots] Mit DumpAsync wird der Heap in der Garbage Collection durchlaufen auf der Suche nach Objekten, die Computer im asynchronen Status darstellen. Diese werden beim Übertragen des Status einer asynchronen Methode an den Heap erstellt. Mit diesem Befehl werden Computer im asynchronen Status erkannt, die als async void, async Task, async Task<T>, async ValueTaskund async ValueTask<T> definiert sind.

Die Ausgabe enthält einen Block mit Details zu jedem gefundenen Computerobjekt im asynchronen Status. Hierzu zählen:
- Eine Zeile für den Typ des Computerobjekts im asynchronen Status, einschließlich der MethodTable-Adresse, der Objektadresse, der Größe und des Typnamens
- Eine Zeile für den im Objekt enthaltenen Typnamen des Statuscomputers
- Eine Auflistung der einzelnen Felder im Statuscomputer
- Eine Zeile für eine Fortsetzung dieses Statuscomputerobjekts, sofern registriert
- Erkannte GC-Stämme für dieses Computerobjekt im asynchronen Status
DumpAssembly<Assemblyadresse> Zeigt Informationen zu einer Assembly an.

Falls vorhanden, werden durch den Befehl DumpAssembly mehrere Module aufgelistet.

Mit dem Befehl DumpDomain kann eine Assemblyadresse abgerufen werden.
DumpClass<EEClass-Adresse> Zeigt Informationen zu der einem Typ zugeordneten EEClass-Struktur an.

Mit dem Befehl DumpClass werden statische, jedoch keine nicht statischen Feldwerte angezeigt.

Verwenden Sie den Befehl DumpMT, DumpObj, Name2EE oder Token2EE, um eine EEClass-Strukturadresse abzurufen.
DumpDomain [<Domänenadresse>] Listet jedes innerhalb der angegebenen Assembly-Objektadresse geladene AppDomain-Objekt auf. Bei einem Aufruf ohne Parameter werden durch den DumpDomain-Befehl alle AppDomain-Objekte in einem Prozess aufgelistet. Da .NET Core nur über eine AppDomain-Klasse verfügt, gibt DumpDomain nur ein Objekt zurück.
DumpHeap [-stat] [-strings] [-short] [-min<Größe>] [-max<Größe>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable-Adresse>] [-type<partieller Typname>] [start [end]] Zeigt Informationen zum Garbage Collector-Heap und Auflistungsstatistiken zu Objekten an.

Durch den Befehl DumpHeap wird bei übermäßiger Fragmentierung im Garbage Collector-Heap eine Warnung angezeigt.

Mit der Option -stat wird die Ausgabe auf eine statistische Zusammenfassung von Typen eingeschränkt.

Mit der Option -strings wird die Ausgabe auf eine statistische Zusammenfassung von Zeichenfolgewerten eingeschränkt.

Mit der Option -short wird nur die Adresse jedes Objekts ausgegeben. Damit können Sie die Ausgabe des Befehls zwecks Automatisierung einfach über die Pipeline an einen anderen Debuggerbefehl übergeben.

Mit der Option -min werden Objekte ignoriert, die kleiner als der in Bytes angegebene size-Parameter sind.

Mit der Option -max werden Objekte ignoriert, die größer als der in Bytes angegebene size-Parameter sind.

Mit der Option -thinlock werden ThinLocks gemeldet. Weitere Informationen finden Sie im Abschnitt zum Befehl SyncBlk.

Mit der -startAtLowerBound-Option wird der Beginn des Heap-Walks an der Untergrenze eines angegebenen Adressbereichs erzwungen. Während der Planungsphase sind Heap-Walks oft nicht möglich, da Objekte verschoben werden. Diese Option erzwingt den Beginn des Heap-Walks mit DumpHeap an der angegebenen Untergrenze. Sie müssen die Adresse eines gültigen Objekts als Untergrenze angeben, damit diese Option funktioniert. Sie können den Arbeitsspeicher bei der Adresse eines ungültigen Objekts anzeigen, um die nächste Methodentabelle manuell zu suchen. Wenn für die Garbage Collection gerade ein Aufruf von memcopy ausgeführt wird, können Sie die Adresse des nächsten Objekts möglicherweise ebenfalls ermitteln, indem Sie der Startadresse die als Parameter angegebene Größe hinzufügen.

Mit der Option -mt werden nur die Objekte aufgelistet, die der angegebenen MethodTable-Struktur entsprechen.

Mit der Option -type werden nur die Objekte aufgelistet, deren Typname einer Teilzeichenfolge der angegebenen Zeichenfolge entspricht.

Durch den start-Parameter wird die Auflistung bei der angegebenen Adresse gestartet.

Durch den end-Parameter wird die Auflistung bei der angegebenen Adresse beendet.
DumpIL<verwaltetes DynamicMethod-Objekt> | <DynamicMethodDesc-Zeiger> | <MethodDesc-Zeiger> Zeigt die Microsoft Intermediate Language (MSIL) an, die einer verwalteten Methode zugeordnet ist.

Dynamische MSIL und aus einer Assembly geladene MSIL werden unterschiedlich ausgegeben. Dynamische MSIL verweist anstelle von Metadatentoken auf Objekte in einem verwalteten Objektarray.
DumpLog [-addr<AdresseBelastungsprotokoll>] [<Dateiname>] Schreibt den Inhalt eines Belastungsprotokolls im Speicher in die angegebene Datei. Ohne Angabe eines Namens wird durch diesen Befehl die Datei "StressLog.txt" im aktuellen Verzeichnis erstellt.

Mithilfe des Belastungsprotokolls im Speicher können Belastungsfehler diagnostiziert werden, ohne Sperren oder I/O zu verwenden. Zum Aktivieren des Belastungsprotokolls legen Sie unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework" die folgenden Registrierungsschlüssel fest:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

Mit der optionalen -addr-Option können Sie ein anderes Belastungsprotokoll als das Standardprotokoll angeben.
DumpMD<MethodDesc-Adresse> Zeigt Informationen zu einer MethodDesc-Struktur bei der angegebenen Adresse an.

Die MethodDesc-Strukturadresse kann mithilfe des Befehls IP2MD von einer verwalteten Funktion abgerufen werden.
DumpMT [-MD] <MethodTable-Adresse> Zeigt Informationen zu einer Methodentabelle bei der angegebenen Adresse an. Durch Angabe der Option -MD wird eine Liste aller mit dem Objekt definierten Methoden angezeigt.

Jedes verwaltete Objekt enthält einen Methodentabellenzeiger.
DumpModule [-mt] <Moduladresse> Zeigt Informationen zu einem Modul bei der angegebenen Adresse an. Mit der Option -mt werden sowohl die in einem Modul definierten und als auch die Typen angezeigt, auf die vom Modul verwiesen wird.

Die Adresse eines Moduls kann mithilfe des DumpDomain-Befehls oder DumpAssembly-Befehls abgerufen werden.
DumpObj [-nofields] <Objektadresse>

Oder

DO<Objektadresse>
Zeigt Informationen zu einem Objekt bei der angegebenen Adresse an. Durch den Befehl DumpObj werden die Felder, die EEClass-Strukturinformationen, die Methodentabelle und die Größe des Objekts angezeigt.

Die Adresse eines Objekts kann mithilfe des Befehls DumpStackObjects abgerufen werden.

Der Befehl DumpObj kann für Felder vom Typ CLASS ausgeführt werden, da es sich bei diesen ebenfalls um Objekte handelt.

Mit der Option -nofields kann die Anzeige von Feldern des Objekts verhindert werden. Dies ist beispielsweise bei Objekten wie „String“ nützlich.
DumpRuntimeTypes Zeigt die Laufzeittypobjekte im Garbage Collector-Heap an und listet die zugehörigen Typnamen sowie Methodentabellen auf.
DumpStack [-EE] [-n] [topstack [bottomstack]] Zeigt eine Stapelüberwachung an.

Mit der Option -EE werden durch den Befehl DumpStack nur verwaltete Funktionen angezeigt. Verwenden Sie den top-Parameter und den bottom-Parameter, um die auf x86-Plattformen angezeigten Stapelrahmen einzuschränken.

Durch die Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn für den Debugger die SYMOPT_LOAD_LINES-Option angegeben wird, sucht SOS die Symbole aller verwalteten Frames und zeigt ggf. den entsprechenden Quelldateinamen und die Zeilennummer an. Der Parameter -n (keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren.

DumpSig<Signaturadresse><Moduladresse> Zeigt Informationen zu einer Sig-Struktur bei der angegebenen Adresse an.
DumpSigElem<Signaturadresse><Moduladresse> Zeigt ein einzelnes Element eines Signaturobjekts an. In den meisten Fällen sollten Sie einzelne Signaturobjekte mithilfe von DumpSig anzeigen. Wenn eine Signatur jedoch irgendwie beschädigt wurde, können mithilfe von DumpSigElem die gültigen Teile ausgelesen werden.
DumpStackObjects [-verify] [topStapel [bottomStapel]]

Oder

DSO [-verify] [topStapel [bottomStapel]]
Zeigt alle innerhalb der Grenzen des aktuellen Stapels gefundenen verwalteten Objekte an.

Mit der Option -verify wird jedes nicht statische CLASS-Feld eines Objektfelds überprüft.

Verwenden Sie den Befehl DumpStackObject mit Stapelüberwachungsbefehlen wie etwaK (WinDbg) oder bt (LLDB) zusammen mit dem Befehl CLRStack, um die Werte lokaler Variablen und Parameter zu ermitteln.
DumpVC<MethodTable-Adresse><Adresse> Zeigt Informationen zu den Feldern einer Wertklasse bei der angegebenen Adresse an.

Mit dem Parameter MethodTable können Felder durch den Befehl DumpVC ordnungsgemäß interpretiert werden. Beim ersten Feld von Wertklassen handelt es sich nicht um eine Methodentabelle.
EEHeap [ -gc] [ -loader] Zeigt Informationen zu dem von internen Laufzeit-Datenstrukturen verwendeten Prozessspeicher an.

Mit den Optionen -gc und -loader wird die Ausgabe dieses Befehls auf Garbage Collector- oder Ladeprogrammdatenstrukturen begrenzt.

In den Garbage Collector-Informationen werden die Bereiche jedes Segments im verwalteten Heap aufgelistet. Wenn der Zeiger in einem durch -gc angegebenen Segmentbereich liegt, handelt es sich um einen Objektzeiger.
EEStack [ -short] [ -EE] Führt den Befehl DumpStack für alle Threads des Prozesses aus.

Die Option -EE wird direkt an den Befehl DumpStack übergeben. Mit dem Parameter -short wird die Ausgabe auf folgende Arten von Threads begrenzt:

Gesperrte Threads

Zwecks Ausführung einer Garbage Collection verzögerte Threads

Threads, die sich derzeit in verwaltetem Code befinden
EHInfo [<MethodDesc-Adresse>] [<Codeadresse>] Zeigt die Ausnahmebehandlungsblöcke in einer angegebenen Methode an. Durch diesen Befehl werden die Codeadressen und Codeoffsets für den Klauselblock (den try-Block) und den Handlerblock (den catch-Block) angezeigt.
FAQ Zeigt häufig gestellte Fragen (FAQs) an. Wird in dotnet-dumpnicht unterstützt.
FinalizeQueue [-detail] | [-allReady] [-short] Zeigt alle für den Abschluss registrierten Objekte an.

Mit der Option -detail werden zusätzliche Informationen zu allen zu bereinigenden SyncBlocks sowie zu allen RuntimeCallableWrappers (RCWs) angezeigt, die auf eine Bereinigung warten. Beide Datenstrukturen werden zwischengespeichert und bei der Ausführung des Finalizer-Threads bereinigt.

Mit der -allReady-Option werden alle zum Abschluss bereiten Objekte angezeigt, unabhängig davon, ob diese bereits entsprechend von der Garbage Collection markiert wurden oder bei der nächsten Garbage Collection markiert werden. Bei den nicht in der Liste der zum Abschluss bereiten Objekte aufgeführten Objekte handelt es sich um finalisierbare Objekte, die keinen Stamm mehr aufweisen. Diese Option kann sehr viel Leistung beanspruchen, da überprüft wird, ob alle Objekte in den finalisierbaren Warteschlangen immer noch über einen Stamm verfügen.

Mit der -short-Option wird die Ausgabe auf die Adresse jedes Objekts begrenzt. In Verbindung mit -allReady werden alle Objekte aufgelistet, die über einen Finalizer, jedoch nicht über einen Stamm verfügen. Bei unabhängiger Verwendung werden alle Objekte in den finalisierbaren und als zum Abschluss bereit markierten Warteschlangen aufgelistet.
FindAppDomain<Objektadresse> Ermittelt die Anwendungsdomäne eines Objekts bei der angegebenen Adresse.
FindRoots-gen<N> | -gen any |<Objektadresse> Bewirkt, dass der Debugger bei der zu debuggenden Komponente in der nächsten Auflistung der angegebenen Generierung angehalten wird. Der Effekt wird zurückgesetzt, sobald die Unterbrechung auftritt. Zum Anhalten in der nächsten Auflistung muss der Befehl erneut angegeben werden. Die <Objektadresse>-Form dieses Befehls wird nach der von -gen oder -gen any ausgelösten Unterbrechung verwendet. Zu diesem Zeitpunkt weist die zu debuggende Komponente den richtigen Zustand für FindRoots auf, um Stämme für Objekte aus den aktuell verurteilten Generierungen zu identifizieren. Wird nur unter Windows unterstützt.
GCHandles [ -perdomain] Zeigt Statistiken über Garbage Collector-Handles im Prozess an.

Mit der Option -perdomain werden die Statistiken nach Anwendungsdomäne sortiert.

Durch den Befehl GCHandles werden von Garbage Collector-Handleverlusten verursachte Speicherverluste gesucht. Beispielsweise tritt ein Speicherverlust auf, wenn im Code ein großes Array beibehalten wird, da ein starkes Garbage Collector-Handle noch darauf verweist, und das Handle ohne Freigabe des Arrays verworfen wird.

Wird nur unter Windows unterstützt.
GCHandleLeaks Durchsucht den Speicher nach Verweisen auf starke und fixierte Garbage Collector-Handles im Prozess und zeigt die Ergebnisse an. Durch den Befehl GCHandleLeaks wird die Adresse des Verweises angezeigt, wenn ein Handle gefunden wird. Wenn im Speicher kein Handle gefunden wird, wird durch diesen Befehl eine Benachrichtigung angezeigt. Wird nur unter Windows unterstützt.
GCInfo<MethodDesc-Adresse><Codeadresse> Zeigt Daten an, die angeben, ob Register oder Stapelspeicherorte verwaltete Objekte aufweisen. Beim Ausführen einer Garbage Collection muss der Garbage Collector über Informationen zu den Speicherorten von Verweisen auf Objekte verfügen, damit diese mit neuen Objektzeigerwerten aktualisiert werden können.
GCRoot [-nostacks] [-all] <Objektadresse> Zeigt Informationen zu Verweisen auf ein Objekt (oder Stämmen eines Objekts) bei der angegebenen Adresse an.

Durch den Befehl GCRoot werden der gesamte verwaltete Heap und die Handletabelle nach Handles innerhalb anderer Objekte sowie Handles auf dem Stapel durchsucht. Anschließend werden jeder Stapel und die Finalizer-Warteschlange nach Objektzeigern durchsucht.

Durch diesen Befehl wird nicht ermittelt, ob ein Stapelstamm gültig ist oder verworfen wurde. Verwenden Sie die Befehle CLRStack und U zum Disassemblieren des Frames, zu dem der lokale Wert oder der Argumentwert gehört, um zu ermitteln, ob der Stapelstamm noch verwendet wird.

Mit der Option -nostacks wird die Suche auf Garbage Collector-Handles und Freachable-Objekte begrenzt.

Mit der Option -all wird erzwungen, dass nicht nur eindeutige Stämme, sondern alle Stämme angezeigt werden.
GCWhere<Objektadresse> Zeigt den Speicherort und die Größe im Garbage Collection-Heap des übergebenen Arguments an. Wenn sich das Argument im verwalteten Heap befindet, jedoch keine gültige Objektadresse darstellt, wird die Größe als 0 (Null) angezeigt.
Help (soshelp) [<Befehl>] [faq] Zeigt alle verfügbaren Befehle an, wenn kein Parameter angegeben wird. Andernfalls werden ausführliche Hilfeinformationen zum angegebenen Befehl angezeigt.

Mit dem faq-Parameter werden Antworten auf häufig gestellte Fragen angezeigt.
HeapStat [-inclUnrooted | -iu] Zeigt die Generierungsgrößen für jeden Heap und den gesamten freien Speicherplatz in jeder Generierung der einzelnen Heaps an. Bei Angabe der Option -inclUnrooted enthält der Bericht Informationen zu den verwalteten Objekten aus dem Garbage Collection-Heap, der keinen Stamm mehr aufweist. Wird nur unter Windows unterstützt.
HistClear Gibt alle von der Familie der Hist-Befehle verwendeten Ressourcen frei.

In der Regel muss HistClear nicht explizit aufgerufen werden, da jeder Aufruf von HistInit die vorherigen Ressourcen bereinigt.
HistInit Initialisiert die SOS-Strukturen aus dem Belastungsprotokoll, die in der zu debuggenden Komponente gespeichert sind.
HistObj<obj_address> Untersucht alle Aufzeichnungen von Belastungsprotokollumsetzungen und zeigt die Kette von Garbage Collection-Umsetzungen 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 bei der angegebenen Adresse verweisen.
HistRoot<root> Zeigt Informationen zu sowohl Heraufstufungen als auch Umsetzungen des angegebenen Stamms an.

Anhand des Stammwerts kann die Bewegung eines Objekts durch die Garbage Collections verfolgt werden.
IP2MD (ip2md) <Codeadresse> Zeigt die MethodDesc-Struktur bei der angegebenen Adresse in JIT (Just-In-Time)-kompiliertem Code an.
ListNearObj (lno) <obj_address> Zeigt die Objekte an, die der angegebenen Adresse vorausgehen und darauf folgen. Der Befehl sucht im Garbage Collection-Heap nach der Adresse, die wie ein gültiger Anfang eines verwalteten Objekts aussieht (auf Grundlage einer gültigen Methodentabelle), und nach dem Objekt, das der Argumentadresse folgt. Wird nur unter Windows unterstützt.
MinidumpMode [0] [1] Verhindert die Ausführung von unsicheren Befehlen bei einem Minidump.

Durch Übergabe von 0 wird diese Funktion deaktiviert und durch 1 aktiviert. In der Standardeinstellung ist der Wert MinidumpMode auf 0 festgelegt.

Minidumps, die mit dem Befehl .dump /m oder dem Befehl .dump erstellt wurden, weisen eingeschränkte CLR-spezifische Daten auf. Daher können nur einige der SOS-Befehle ordnungsgemäß ausgeführt werden. Bei einigen Befehlen können unerwartete Fehlern auftreten, da erforderliche Speicherbereiche nicht oder nur teilweise zugeordnet sind. Mit dieser Option wird die Ausführung unsicherer Befehle bei Minidumps verhindert.

Wird nur in WinDbg unterstützt.
Name2EE (name2ee) <Modulname><Typ oder Methodenname>

Oder

Name2EE<Modulname>!<Typ- oder Methodenname>
Zeigt die MethodTable-Struktur und die EEClass-Struktur für den angegebenen Typ oder die angegebene Methode im angegebenen Modul an.

Das angegebene Modul muss im Prozess geladen werden.

Durchsuchen Sie das Modul mit dem Ildasm.exe (IL-Disassembler), um den richtigen Typnamen abzurufen. Sie können auch * als Modulnamensparameter übergeben, um alle geladenen verwalteten Module zu durchsuchen. Beim Parameter Modulname kann es sich auch um den Namen des Debuggers für ein Modul handeln, z.B. mscorlib oder image00400000.

Von diesem Befehl wird die Windows-Debuggersyntax <module>!<type> unterstützt. Der Typ muss vollqualifiziert sein.
ObjSize [<Objektadresse>] | [-aggregate] [-stat] Zeigt die Größe des angegebenen Objekts an. Ohne Angabe von Parametern werden durch den Befehl ObjSize die Größe aller in verwalteten Threads gefundenen Objekte, alle Garbage Collector-Handles im Prozess sowie die Gesamtgröße aller Objekte angezeigt, auf die diese Handles verweisen. Der Befehl ObjSize enthält neben der Größe des übergeordneten Elements auch die Größe aller untergeordneten Objekte.

In Verbindung mit dem Argument -stat kann mithilfe der Option -aggregate eine ausführliche Ansicht der Typen abgerufen werden, die immer noch über Stamm verfügen. Mithilfe von !dumpheap -stat und !objsize -aggregate -stat können Objekte ohne Stamm ermittelt und verschiedene Arbeitsspeicherprobleme diagnostiziert werden.

Wird nur unter Windows unterstützt.
PrintException [-nested] [-lines] [<Ausnahmeobjektadresse>]

Oder

PE [-nested] [<Ausnahmeobjektadresse>]
Zeigt die Felder jedes Objekts an, das bei der angegebenen Adresse von der Exception-Klasse abgeleitet wird, und formatiert diese Felder. Ohne Angabe einer Adresse wird durch den Befehl PrintException die letzte im aktuellen Thread ausgelöste Ausnahme angezeigt.

Mit der Option -nested werden Details zu geschachtelten Ausnahmeobjekten angezeigt.

Mit der Option -lines werden Quelleninformationen angezeigt, sofern verfügbar.

Mithilfe dieses Befehls kann das _stackTrace-Feld formatiert und angezeigt werden, 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 Speicherauslastungsstatistiken an. Wird nur in WinDbg unterstützt.
RCWCleanupList<RCWCleanupList-Adresse> Zeigt die Liste der Runtime Callable Wrapper bei der angegebenen Adresse an, die auf Bereinigung warten. Wird nur in WinDbg unterstützt.
SaveModule<Basisadresse><Dateiname> Schreibt ein Image, das bei der angegebenen Adresse in den Speicher geladen wird, in die angegebene Datei. Wird nur in WinDbg unterstützt.
SetHostRuntime [<Runtimeverzeichnis>] Mit diesem Befehl wird der Pfad zur .NET Core-Runtime festgelegt, die zum Hosten des verwalteten Codes verwendet werden soll, der als Teil von SOS im Debugger (LLDB) ausgeführt wird. Die Mindestversion für die Runtime lautet 2.1.0. Enthält das Verzeichnis Leerzeichen, muss es in einfachen Anführungszeichen (') angegeben werden.

Normalerweise sucht SOS zur automatischen Ausführung des verwalteten Codes nach einer installierten .NET Core-Runtime. Gelingt dies nicht, kann dieser Befehl verwendet werden. Als Standardeinstellung wird die für das Debuggen verwendete Laufzeit (libcoreclr) verwendet. Verwenden Sie diesen Befehl, wenn die Standardlaufzeit für das Debuggen zum Ausführen des SOS-Codes nicht ausreicht oder bei Versionen älter als 2.1.0.

Wenn Sie die folgende Fehlermeldung beim Ausführen eines SOS-Befehls erhalten, verwenden Sie diesen Befehl, um den Pfad auf eine .NET Core-Runtime höher als 2.1.0 festzulegen.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Mithilfe von „dotnet --info“ können Sie in einer Befehlsshell nach dem Pfad einer installierten .NET Core-Runtime suchen.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<Cachepfad>] [-directory<Suchverzeichnis>] [-sympath<Windows-Symbolpfad>] [<Symbolserver-URL>] Aktiviert Unterstützung für das Herunterladen des Symbolservers.

Mit der Option -ms wird das Herunterladen vom öffentlichen Microsoft-Symbolserver aktiviert.

Mit der Option -disable wird Unterstützung für das Herunterladen von Symbolen aktiviert.

Mit der Option -cache<Cachepfad> wird ein Verzeichnis für den Symbolcache angegeben. Wird kein Wert angegeben, lautet der Standardwert „$HOME/.dotnet/symbolcache“.

Mit der Option -directory wird ein Pfad für die Suche nach Symbolen hinzugefügt. Es kann mehr als ein Pfad angegeben werden.

Mit der Option -sympath werden Server-, Cache- und Verzeichnispfade im Windows-Format für Symbolpfade hinzugefügt.

Mit der Option -log wird die Protokollierung von Symboldownloads aktiviert.

Mit der Option -loadsymbols sollen die nativen .NET Core-Symbole für die Laufzeit heruntergeladen werden. Wird in LLDB und dotnet-dump unterstützt.
SOSFlush Leert einen internen SOS-Cache.
SOSStatus [ -reset] Zeigt den internen SOS-Status an oder setzt den internen zwischengespeicherten Status zurück.
StopOnException [-derived] [-create | -create2] <Ausnahme><Pseudoregisternummer> Bewirkt, dass der Debugger bei Auslösung der angegebenen Ausnahme unterbrochen, bei allen anderen Ausnahmen jedoch weiter ausgeführt wird.

Mit der Option -derived werden die angegebene Ausnahme sowie alle davon abgeleiteten Ausnahmen abgefangen.

Wird nur in WinDbg unterstützt.
SyncBlk [-all | <syncblk-Nummer>] Zeigt die angegebene SyncBlock-Struktur oder alle SyncBlock-Strukturen an. Ohne Übergabe von Argumenten wird durch den Befehl SyncBlk die SyncBlock-Struktur angezeigt, die Objekten im Besitz von Threads entspricht.

Bei einer SyncBlock-Struktur handelt es sich um einen Container für zusätzliche Informationen, der nicht für jedes Objekt erstellt werden muss. Der Container kann COM-Interop-Daten, Hashcodes und Sperreninformationen für threadsichere Vorgänge enthalten.
ThreadPool Zeigt Informationen zum verwalteten Threadpool an, darunter die Anzahl der Arbeitsanforderungen in der Warteschlange, der Abschlussanschlussthreads und der Timer.
Threads (clrthreads) [ -live] [ -special] Zeigt alle verwalteten Threads im Prozess an.

Durch den Befehl Threads werden die Kurzform der Debugger-ID sowie die Thread-ID der CLR und des Betriebssystems angezeigt. Darüber hinaus werden durch den Befehl Threads eine Domänenspalte mit der Anwendungsdomäne, in der der Thread ausgeführt wird, eine APT-Spalte mit dem COM-Apartmentmodus und eine Ausnahmespalte mit der letzten im Thread ausgelösten Ausnahme angezeigt.

Mit der Option -live werden zu einem aktiven Thread gehörende Threads angezeigt.

Mit der Option -special werden alle von der CLR erstellten besonderen Threads angezeigt. Zu den besonderen Threads gehören Garbage Collection-Threads (in der gleichzeitigen und der Server-Garbage Collection), Hilfsthreads des Debuggers, Finalizer-Threads, AppDomain-Entladungsthreads sowie Timerthreads des Threadpools.
ThreadState <Zustandswertfeld > Zeigt den Zustand des Threads an. Beim Parameter value handelt es sich um den Wert des Felds State in der Threads-Berichtsausgabe.
Token2EE<Modulname><Token> Wandelt das angegebene Metadatentoken im angegebenen Modul in eine MethodTable-Struktur oder MethodDesc-Struktur um.

Durch Angabe von * als Modulnamensparameter kann ermittelt werden, welchem Element in jedem geladenen verwalteten Modul dieses Token zugeordnet ist. Alternativ kann auch der Name des Debuggers für ein Modul übergeben werden, z. B. mscorlib oder image00400000.
U [-gcinfo] [-ehinfo] [-n] <MethodDesc-Adresse> | <Codeadresse> Zeigt eine mit Anmerkungen versehene Disassembly einer verwalteten Methode an, die durch einen MethodDesc-Strukturzeiger für die Methode oder durch eine Codeadresse im Methodentext angegeben wird. Durch den Befehl U wird die gesamte Methode mit Anmerkungen angezeigt, die Metadatentoken in Namen umwandeln.

Mit der Option -gcinfo wird durch den Befehl U die GCInfo-Struktur für die Methode angezeigt.

Mit der Option -ehinfo werden Ausnahmeinformationen für die Methode angezeigt. Sie können diese Informationen auch mit dem Befehl EHInfo abrufen.

Durch die Option -n wird die Anzeige von Quelldateinamen und Zeilennummern deaktiviert. Wenn für den Debugger die SYMOPT_LOAD_LINES-Option angegeben ist, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt ggf. den entsprechenden Quelldateinamen und die Zeilennummer an. Mit der Option -n wird dieses Verhalten deaktiviert.
VerifyHeap Überprüft den Garbage Collector-Heap auf Anzeichen von Beschädigung und zeigt alle gefundenen Fehler an.

Heapbeschädigungen können von nicht ordnungsgemäß erstellten Plattformaufrufen verursacht werden.
VerifyObj<Objektadresse> Überprüft das Objekt, das als Argument für Anzeichen für Beschädigungen übergeben wird. Wird nur unter Windows unterstützt.
VMMap Durchläuft den virtuellen Adressenbereich und zeigt den Typ des Schutzes an, der auf jeden Bereich angewendet wird. Wird nur in WinDbg unterstützt.
VMStat Bietet eine Zusammenfassungsansicht des virtuellen Adressbereichs, geordnet nach allen Arten des Schutzes für den Speicher (frei, reserviert, zugesichert, privat, zugeordnet, Image). Die Spalte TOTAL zeigt das Ergebnis der Spalte AVERAGE multipliziert mit der Spalte BLK COUNT an. Wird nur in WinDbg unterstützt.

dotnet-dump

Eine Liste der verfügbaren SOS-Befehle mit dotnet-dump analyze finden Sie unter dotnet-dump.

Windows-Debugger

Sie können die SOS-Debugerweiterung auch in den WinDbg/dbg-Debugger laden und im Windows-Debugger Befehle ausführen. SOS-Befehle können für Liveprozesse oder Speicherabbilder verwendet werden.

Windbg sollte die SOS-Erweiterung automatisch laden, wenn der zu debuggende Prozess die .NET Core-Runtime („coreclr.dll“ oder „libcoreclr.so“) enthält.

LLDB-Debugger

Anweisungen zum Konfigurieren von SOS für LLDB finden Sie unter dotnet-sos. SOS-Befehle können für Liveprozesse oder Speicherabbilder verwendet werden.

Die Standardeingabe für alle SOS-Befehle lautet: sos [command_name]. Den gängigen Befehlen wurde jedoch ein Alias zugeordnet, wodurch das sos-Präfix nicht benötigt wird:

Befehl Funktion
analyzeoom Zeigt Informationen zum letzten OOM-Ereignis an, das bei einer Speicherbelegungsanforderung an den Garbage Collection-Heap aufgetreten ist.
bpmd Erstellt einen Haltepunkt bei der angegebenen verwalteten Methode im angegebenen Modul.
clrmodules Listet die verwalteten Module im Prozess auf.
clrstack Stellt eine Stapelüberwachung ausschließlich für verwalteten Code bereit.
clrthreads Listet die verwalteten Threads auf, die ausgeführt werden.
clru Zeigt eine mit Anmerkungen versehene Disassembly einer verwalteten Methode an.
dbgout Aktiviert/deaktiviert (-off) die interne SOS-Protokollierung.
dso Zeigt alle innerhalb der Grenzen des aktuellen Stapels gefundenen verwalteten Objekte an.
dumpalc Zeigt Details zu einem entladbaren AssemblyLoadContext an, in den das angegebene Objekt geladen wird.
dumparray Zeigt Details zu einem verwalteten Array an.
dumpasync Zeigt Informationen zu Computern im asynchronen Status im Heap der Garbage Collection an.
dumpassembly Zeigt Details zu einer Assembly an.
dumpclass Zeigt Informationen zur EEClass-Struktur bei der angegebenen Adresse an.
dumpconcurrentdictionary Zeigt parallele Wörterbuchinhalte an.
dumpconcurrentqueue Zeigt parallele Warteschlangeninhalte an.
dumpdelegate Zeigt Informationen zu einem Delegaten an.
dumpdomain Zeigt Informationen zu allen Assemblys in allen Anwendungsdomänen oder in der angegebenen Domäne an.
dumpgcdata Zeigt Informationen zu Garbage Collection-Daten an.
dumpgen Zeigt den Heapinhalt für die angegebene Generation an.
dumpheap Zeigt Informationen zum Garbage Collector-Heap und Sammlungsstatistiken zu Objekten an.
dumpil Zeigt die MSIL (Microsoft Intermediate Language) an, die einer verwalteten Methode zugeordnet ist.
dumplog Schreibt den Inhalt eines Belastungsprotokolls im Speicher in die angegebene Datei.
dumpmd Zeigt Informationen zur MethodDesc-Struktur bei der angegebenen Adresse an.
dumpmodule Zeigt Informationen zum Modul bei der angegebenen Adresse an.
dumpmt Zeigt Informationen zur Methodentabelle bei der angegebenen Adresse an.
dumpobj Zeigt Informationen zum Objekt bei der angegebenen Adresse an.
dumpruntimetypes Sucht alle System.RuntimeType-Objekte im Garbage Collection-Heap und gibt den Typnamen und die MethodTable aus, auf die sie verweisen.
dumpsig Sichert die Signatur einer Methode oder eines Felds, die bzw. das durch <sigaddr> <moduleaddr> angegeben wird.
dumpsigelem Sichert ein einzelnes Element eines Signaturobjekts.
dumpstack Zeigt eine native und verwaltete Stapelüberwachung an.
dumpstackobjects Zeigt alle innerhalb der Grenzen des aktuellen Stapels gefundenen verwalteten Objekte an.
dumpvc Zeigt Informationen zu den Feldern einer Wertklasse an.
eeheap Zeigt Informationen zu dem von internen Laufzeit-Datenstrukturen verwendeten Prozessspeicher an.
eestack Führt dumpstack für alle Threads im Prozess aus.
eeversion Zeigt Informationen zu den Runtime- und SOS-Versionen an.
ehinfo Zeigt die Ausnahmebehandlungsblöcke in einer angegebenen JIT-Methode an.
finalizequeue Zeigt alle für den Abschluss registrierten Objekte an.
findappdomain Versucht, die Anwendungsdomäne eines Garbage Collection-Objekts aufzulösen.
findroots Sucht Objektstämme in Garbage Collection-Auflistungen und zeigt sie an.
gchandles Zeigt Statistiken über Garbage Collector-Handles im Prozess an.
gcheapstat Zeigt Statistiken zum Garbage Collector an.
gcinfo Zeigt die JIT-Garbage Collection-Codierung für eine Methode an.
gcroot Zeigt Informationen zu Verweisen auf das Objekt (oder Stämmen) bei der angegebenen Adresse an.
gcwhere Zeigt den Speicherort im Garbage Collection-Heap der angegebenen Adresse an.
histclear Gibt alle von der Familie der Hist-Befehle verwendeten Ressourcen frei.
histinit Initialisiert die SOS-Strukturen aus dem Belastungsprotokoll, die in der zu debuggenden Komponente gespeichert sind.
histobj Untersucht alle Aufzeichnungen von Belastungsprotokollumsetzungen und zeigt die Kette von Garbage Collection-Umsetzungen an, die möglicherweise zu der als Argument übergebenen Adresse geführt haben.
histobjfind Zeigt alle Protokolleinträge an, die auf das Objekt bei der angegebenen Adresse verweisen.
histroot Zeigt Informationen zu sowohl Heraufstufungen als auch Umsetzungen des angegebenen Stamms an.
histstats Zeigt Statistiken zum Belastungsprotokoll an.
ip2md Zeigt die MethodDesc-Struktur bei der angegebenen Adresse in JIT (Just-In-Time)-kompiliertem Code an.
listnearobj Zeigt das Objekt an, das der angegebenen Adresse vorausgeht und darauf folgt.
loadsymbols Lädt die nativen Symbole des .NET Core-Moduls.
logging Aktiviert/deaktiviert die interne SOS-Protokollierung.
name2ee Zeigt die Strukturen MethodTable und EEClass 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 Threadsstapel ähnlich wie im Visual Studio-Bereich „Parallele Stapel“ an.
pathto Zeigt den Garbage Collection-Pfad von <root> zu <target> an.
pe Zeigt die Felder jedes Objekts an, das bei der angegebenen Adresse von der Exception-Klasse abgeleitet wird, und formatiert diese Felder.
printexception Zeigt die Felder jedes Objekts an, das bei der angegebenen Adresse von der Exception-Klasse abgeleitet wird, und formatiert diese Felder.
runtimes Listet die Runtimes im Ziel auf oder ändert die Standardruntime.
stoponcatch Der Zielprozess wird beim nächsten Abfangen einer verwalteten Ausnahme während der Ausführung unterbrochen.
setclrpath Legt den Pfad zum Laden von CoreCLR-DAC/DBI-Dateien fest. setclrpath <path>.
sethostruntime Legt das Verzeichnis für die .NET Core-Runtime fest, die zum Ausführen von verwaltetem Code in SOS verwendet werden soll, oder zeigt das Verzeichnis an.
setsymbolserver Aktiviert Unterstützung für den Symbolserver.
setsostid Legt den TID-/Threadindex des aktuellen Betriebssystems fest, anstatt den LLDB-Wert zu verwenden. setsostid <tid> <index>.
sos Führt verschiedene CoreCLR-Debugbefehle 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 wurde. Andernfalls werden ausführliche Hilfeinformationen zum angegebenen Befehl angezeigt: soshelp <command>.
syncblk Zeigt die Informationen zum SyncBlock-Container an.
taskstate Zeigt einen Vorgangszustand in einem lesbaren Format an.
threadpool Zeigt Informationen zum Threadpool der Runtime an.
threadpoolqueue Zeigt Arbeitselemente für Threadpools in der Warteschlange an.
threadstate Gibt die Bedeutung eines Threadszustands mit automatischer Strukturierung und Einrückung aus.
timerinfo Zeigt Informationen zu ausgeführten Timern an.
token2ee Zeigt die MethodTable-Struktur und die MethodDesc-Struktur für das angegebene Token und Modul an.
traverseheap Schreibt Heapinformationen in einem vom CLR-Profiler lesbaren Format in eine Datei.
verifyheap Überprüft den Garbage Collection-Heap auf Anzeichen einer Beschädigung.
verifyobj Überprüft das Objekt, das als Argument für Anzeichen für Beschädigungen übergeben wird.

WinDbg/cdb-Verwendungsbeispiel

Befehl BESCHREIBUNG
!dumparray -start 2 -length 5 -details 00ad28d0 Zeigt den Inhalt eines Arrays bei der Adresse 00ad28d0 an. Die Anzeige beginnt beim zweiten Element und wird für fünf Elemente fortgesetzt.
!dumpassembly 1ca248 Zeigt den Inhalt einer Assembly bei der Adresse 1ca248 an.
!dumpheap Zeigt Informationen zum Heap der Garbage Collection an.
!DumpLog Schreibt den Inhalt des Belastungsprotokolls im Speicher in die Standarddatei „StressLog.txt“ im aktuellen Verzeichnis.
!dumpmd 902f40 Zeigt die MethodDesc-Struktur bei der Adresse 902f40 an.
!dumpmodule 1caa50 Zeigt Informationen zu einem Modul bei der Adresse 1caa50 an.
!DumpObj a79d40 Zeigt Informationen zu einem Objekt bei der Adresse a79d40 an.
!DumpVC 0090320c 00a79d9c Zeigt die Felder einer Wertklasse bei der Adresse 00a79d9c mithilfe der Methodentabelle bei der Adresse 0090320c an.
!eeheap -gc Zeigt den vom Garbage Collector verwendeten Prozessspeicher an.
!finalizequeue Zeigt alle für den Abschluss geplanten Objekte an.
!findappdomain 00a79d98 Ermittelt die Anwendungsdomäne eines Objekts bei der Adresse 00a79d98.
!gcinfo 5b68dbb8 Zeigt alle Garbage Collector-Handles im aktuellen Prozess an.
!name2ee unittest.exe MainClass.Main Zeigt die Strukturen MethodTable und EEClass für die Methode Main in der Klasse MainClass im Modul unittest.exe an.
!token2ee unittest.exe 02000003 Zeigt Informationen zum Metadatentoken bei der Adresse 02000003 im Modul unittest.exe an.

LLDB-Verwendungsbeispiel

Befehl BESCHREIBUNG
dumparray -start 2 -length 5 -details 00ad28d0 Zeigt den Inhalt eines Arrays bei der Adresse 00ad28d0 an. Die Anzeige beginnt beim zweiten Element und wird für fünf Elemente fortgesetzt.
dumpassembly 1ca248 Zeigt den Inhalt einer Assembly bei der Adresse 1ca248 an.
dumpheap Zeigt Informationen zum Heap der Garbage Collection an.
dumplog Schreibt den Inhalt des Belastungsprotokolls im Speicher in die Standarddatei „StressLog.txt“ im aktuellen Verzeichnis.
dumpmd 902f40 Zeigt die MethodDesc-Struktur bei der Adresse 902f40 an.
dumpmodule 1caa50 Zeigt Informationen zu einem Modul bei der Adresse 1caa50 an.
dumpobj a79d40 Zeigt Informationen zu einem Objekt bei der Adresse a79d40 an.
dumpvc 0090320c 00a79d9c Zeigt die Felder einer Wertklasse bei der Adresse 00a79d9c mithilfe der Methodentabelle bei der Adresse 0090320c an.
eeheap -gc Zeigt den vom Garbage Collector verwendeten Prozessspeicher an.
findappdomain 00a79d98 Ermittelt die Anwendungsdomäne eines Objekts bei der Adresse 00a79d98.
gcinfo 5b68dbb8 Zeigt alle Garbage Collector-Handles im aktuellen Prozess an.
name2ee unittest.exe MainClass.Main Zeigt die Strukturen MethodTable und EEClass für die Methode Main in der Klasse MainClass im Modul unittest.exe an.
token2ee unittest.exe 02000003 Zeigt Informationen zum Metadatentoken bei der Adresse 02000003 im Modul unittest.exe an.
clrthreads Zeigt die verwalteten Threads an.

Siehe auch