Share via


SOS.dll (SOS-Debugerweiterung)

Aktualisiert: April 2011

Die SOS-Debugerweiterung (SOS.dll) stellt Informationen über die interne Common Language Runtime-Umgebung (CLR) bereit und hilft Ihnen so beim Debuggen von verwalteten Anwendungen im WinDbg.exe-Debugger und in Visual Studio. Dieses Tool erfordert, dass für Ihr Projekt das nicht verwaltete Debuggen aktiviert ist. Sie können auch die SOS-Debugerweiterung mit dem Windows-Debugger (WinDbg.exe) verwenden.

Dieses Tool wird automatisch mit Visual Studio und mit dem Windows SDK installiert. Um das Tool auszuführen, empfiehlt es sich, dass Sie die Visual Studio-Eingabeaufforderung oder Windows SDK-Eingabeaufforderung (CMD-Shell) verwenden. Mit diesen Hilfsprogrammen können Sie das Tool problemlos ausführen, ohne in den Installationsordner zu navigieren. Weitere Informationen finden Sie unter Visual Studio- und Windows SDK-Eingabeaufforderungen.

  • Wenn Visual Studio auf dem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, Visual Studio und Visual Studio Tools, und klicken Sie dann auf Visual Studio Command Prompt.

    – oder –

    Wenn das Windows SDK auf Ihrem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, klicken Sie auf den Ordner für das Windows SDK, und klicken anschließend auf Command Prompt (oder CMD Shell).

  • Geben Sie an der Eingabeaufforderung Folgendes ein:

![command] [options] 

Befehle

Befehl

Beschreibungen

AnalyzeOOM (ao)

Zeigt die Informationen für den letzten OOM an, der auf einer Speicherbelegungsanfrage zum Garbage Collection-Heap aufgetreten ist. (In Garbage Collection auf dem Server zeigt es ggf. OOM auf jedem Garbage Collection-Heap an.)

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 angegebene Methode nicht geladen wurden, wartet dieser Befehl auf eine Benachrichtigung darüber, dass das Modul geladen wurde und die JIT-Kompilierung (Just-in-Time) stattgefunden hat, bevor ein Haltepunkt erstellt wurde.

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

  • Die -list-Option generiert eine Liste aller ausstehenden Haltepunkte. Wenn ein ausstehender Haltepunkt eine Modul-ID ungleich 0 (null) hat, ist dieser Haltepunkt spezifisch für eine Funktion in diesem speziellen geladenen Modul. Wenn der ausstehende Haltepunkt Modul-ID von Null hat, gilt dieser Haltepunkt für Module, die noch nicht geladen wurden.

  • Verwenden Sie zum Entfernen ausstehender Haltepunkte aus der Auflistung die -clear-Methode oder die -clearall-Methode.

CLRStack [-a] [-l] [-p] [-n]

Stellt eine Stapelüberwachung ausschließlich für verwalteten Code bereit.

  • Die -p-Option zeigt Argumente zur verwalteten Funktion an.

  • Die -l-Option zeigt Informationen zu lokalen Variablen in einem Rahmen an. Da die SOS-Debugerweiterung keine lokalen Namen abrufen kann, hat die Ausgabe für lokale Namen das Format <lokale Adresse> = <Wert>.

  • Die Option -a (alles) kann als Kurzform für die Kombination -l und -p verwendet werden.

  • Die -n-Option deaktiviert die Anzeige von Quelldateinamen und Zeilennummern. Wenn für den Debugger die Option SYMOPT_LOAD_LINES angegeben ist, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt im Erfolgsfall den entsprechenden Quelldateinamen und die Zeilennummer an. Der -n-Parameter (keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren.

Die SOS-Debugerweiterung zeigt auf x64- und IA-64-basierten Plattformen keine Übergangsrahmen an.

COMState

Listet das COM-Apartmentmodell für jeden Thread und einen Context-Zeiger auf, falls verfügbar.

DumpArray [-start <startIndex>] [-length <Länge>] [-details] [-nofields] <Arrayobjektadresse>

– oder –

DA [-start <startIndex>] [-length <Länge>] [-detail] [-nofields] Arrayobjektadresse>

Überprüft Elemente eines Arrayobjekts.

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

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

  • Die -details-Option zeigt Details des Elements mithilfe des DumpObj-Formats und des DumpVC-Formats an.

  • Die -nofields-Option verhindert, dass Arrays angezeigt werden. Diese Option steht nur dann zur Verfügung, wenn die -detail-Option angegeben wurde.

DumpAssembly <Assemblyadresse>

Zeigt Informationen zu einer Assembly an.

Mit dem Befehl DumpAssembly werden mehrere Module aufgelistet, wenn diese vorhanden sind.

Sie können mit dem DumpDomainBefehl eine Assemblyadresse abrufen.

DumpClass <EEClass-Adresse>

Zeigt Informationen zu der einem Typ zugeordneten EEClass-Struktur an.

Mit dem Befehl DumpClass werden Werte für statische Felder, jedoch nicht für nicht statische Felder angezeigt.

Verwenden Sie den Befehl DumpMT, DumpObj, Name2EE oder Token2EE, um eine EEClass-Strukturadresse abzurufen.

DumpDomain [<Domänenadresse>]

Listet jedes innerhalb des angegebenen AppDomain-Objekts geladene Assembly-Objekt auf. Wenn er ohne Parameter aufgerufen wird, listet der Befehl DumpDomain alle AppDomain-Objekte in einem Prozess auf.

DumpHeap [-stat] [-strings] [-short] [-min <Größe>] [-max <Größe>] [-thinlock] [-startAtLowerBound] [-mt <MethodTable-Adresse>] [-type <partieller Typname>][Beginn [Ende]]

Zeigt Informationen zum Garbage Collector-Heap und Auflistungsstatistiken zu Objekten an.

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

  • Die -stat-Option beschränkt die Ausgabe auf eine nach Objekttypen geordnete Zusammenfassung.

  • Die -strings-Option beschränkt die Ausgabe auf eine statistische Übersicht der Zeichenfolgewerte.

  • Die -short-Option schränkt die Ausgabe auf lediglich die Adresse eines jeden Objekts ein. Damit können Sie die Ausgabe an einen anderen Debuggerbefehl zur Automatisierung im Befehl über die Pipeline leicht übergeben.

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

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

  • Die -thinlock-Option meldet ThinLocks. Weitere Informationen finden Sie unter den Informationen zum Befehl SyncBlk.

  • Die -startAtLowerBound-Option erzwingt den Beginn des Heapgangs an der Untergrenze eines angegebenen Adressbereichs. Während der Planungsphase ist der Heap oft nicht begehbar, da Objekte verschoben werden. Diese Option zwingt DumpHeap, seinen Gang in die angegebene Untergrenze zu starten. 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 die Garbage Collection gerade in einem Aufruf von memcopy ist, sind Sie möglicherweise auch in der Lage, die Adresse des nächsten Objekts zu suchen, indem Sie die Größe zur Startadresse hinzufügen, die als Parameter angegeben wird.

  • Die -mt-Option listet nur die Objekte auf, die den Angaben in der MethodTable-Struktur entsprechen.

  • Die -type-Option listet nur die Objekte auf, deren Typname eine Teilzeichenfolge der angegebenen Zeichenfolge ist.

  • Der start-Parameter startet die Auflistung bei der angegebenen Adresse.

  • Der end-Parameter stoppt die Auflistung bei der angegebenen Adresse.

DumpIL <Managed DynamicMethod-Objekt> | <DynamicMethodDesc-Zeiger> | <MethodDesc-Zeiger>

Zeigt die Microsoft Intermediate Language (MSIL) an, die einer verwalteten Methode zugeordnet ist.

Beachten Sie, dass die dynamische MSIL anders ausgegeben wird, als die aus einer Assembly geladene MSIL. Die dynamische MSIL verweist eher auf Objekte in einem verwalteten Objektarray als auf Metadatentoken.

DumpLog [-addr <addressOfStressLog>] [<Filenam e>]

Schreibt den Inhalt eines speicherresidenten Belastungsprotokolls in die angegebene Datei. Wenn Sie keinen Namen angeben, erstellt dieser Befehl die Datei StressLog.txt im aktuellen Verzeichnis.

Das speicherresidente Belastungsprotokoll hilft, Belastungsfehler zu diagnostizieren, ohne Sperren oder I/O zu verwenden. Zum Aktivieren des Belastungsprotokolls legen Sie die folgenden Registrierungsschlüssel unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 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.

Sie können den Befehl IP2MD verwenden, um die MethodDesc-Strukturadresse von einer verwalteten Funktion abzurufen.

DumpMT [-MD] <MethodTable-Adresse>

Zeigt Informationen zu einer Methodentabelle bei der angegebenen Adresse an. Wenn die -MD-Option angegeben wird, wird eine Liste aller mit dem Objekt definierten Methoden angezeigt.

Jedes verwaltete Objekt enthält einen Methodentabellenzeiger.

DumpMethodSig <sigaddr> <moduleaddr>

Zeigt Informationen zu einer MethodSig-Struktur bei der angegebenen Adresse an.

DumpModule [-mt] <Moduladresse>

Zeigt Informationen zu einem Modul an der angegebenen Adresse an. Die -mt-Option zeigt die in einem Modul definierten Typen und die Typen an, auf die vom Modul verwiesen wird.

Sie können den Befehl DumpDomain oder DumpAssembly verwenden, um die Adresse eines Moduls abzurufen.

DumpObj [-nofields] <Objektadresse>

– oder –

DO <Objektadresse>

Zeigt Informationen zu einem Objekt bei 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.

Beachten Sie, dass Sie den Befehl DumpObj für Felder vom Typ CLASS ausführen können, da diese auch Objekte sind.

Die -nofields-Option verhindert, dass Felder des Objekts angezeigt werden, was bei Objekte wie Zeichenfolgen nützlich ist.

DumpRuntimeTypes

Zeigt die Objekte vom Typ CLR im Garbage Collector-Heap an und listet die dazugehörigen Typnamen und Methodentabellen auf.

DumpStack [-EE] [-n] [top Stapel [bottom Stapelk]]

Zeigt eine Stapelüberwachung an.

  • Die -EE-Option bewirkt, dass der Befehl DumpStack nur verwaltete Funktionen anzeigt. Verwenden Sie die Parameter top und bottom, um die auf x86-Plattformen angezeigten Stapelrahmen einzuschränken.

  • Die -n-Option deaktiviert die Anzeige von Quelldateinamen und Zeilennummern. Wenn für den Debugger die Option SYMOPT_LOAD_LINES angegeben ist, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt im Erfolgsfall den entsprechenden Quelldateinamen und die Zeilennummer an. Der -n-Parameter (keine Zeilennummern) kann angegeben werden, um dieses Verhalten zu deaktivieren.

Auf x86- und x64-Plattformen wird mit dem Befehl DumpStack eine ausführliche Stapelüberwachung erstellt.

Auf IA-64-basierten Plattformen imitiert der Befehl DumpStack den Befehl K des Debuggers. Die Parameter top und bottom werden auf x64- und IA-64-basierten Plattformen ignoriert.

DumpSig <sigaddr> <moduleaddr>

Zeigt Informationen zu einer Sig-Struktur bei der angegebenen Adresse an.

DumpSigElem <sigaddr> <moduleaddr>

Zeigt ein einzelnes spezifisches Element eines Signaturobjekts an. In den meisten Fällen sollten Sie einzelne Signaturobjekte mithilfe von DumpSig anschauen. Wenn eine Signatur jedoch irgendwie beschädigt wurde, können Sie ihre gültigen Teile mithilfe von DumpSigElem lesen.

DumpStackObjects [-verify] [top-Stapel [bottom- Stapel]]

– oder –

DSO [-verify] [top-Stapel [bottom- Stapel]]

Zeigt alle innerhalb der Grenzen des aktuellen Stapels gefundenen verwalteten Objekte an.

Die -verify-Option überprüft jedes nicht statische CLASS-Feld eines Objektfelds.

Verwenden Sie den Befehl DumpStackObject mit Stapelüberwachungsbefehlen, z. B. dem Befehl K und dem Befehl CLRStack, um die Werte lokaler Variablen und Parameter zu bestimmen.

DumpVC <MethodTable-Adresse> <Adresse>

Zeigt Informationen zu den Feldern einer Wertklasse bei der angegebenen Adresse an.

Der MethodTable-Parameter ermöglicht es dem Befehl DumpVC, Felder korrekt zu interpretieren. Wertklassen verfügen nicht über eine Methodentabelle als erstes Feld.

EEHeap [-gc] [-loader]

Zeigt Informationen zu dem von den internen Common Language Runtime-Datenstrukturen verwendeten Prozessspeicher an.

Die -gc-Option und die -loader-Option begrenzen die Ausgabe dieses Befehls auf Garbage Collector- oder Ladeprogrammdatenstrukturen.

In den Informationen zum Garbage Collector werden die Bereiche jedes Segments im verwalteten Heap aufgelistet. Wenn der Zeiger innerhalb eines von -gc angegebenen Segmentbereichs liegt, ist der Zeiger ein Objektzeiger.

EEStack [-short] [-EE]

Führt den Befehl DumpStack auf allen Threads im Prozess aus.

Die -EE-Option wird direkt an den Befehl DumpStack übergeben. Der -short-Parameter beschränkt die Ausgabe auf die folgenden Arten von Threads:

  • Threads, die gesperrt wurden.

  • Threads, die verzögert wurden, um eine Garbage Collection zuzulassen.

  • Threads, die sich gerade in verwaltetem Code befinden.

EEVersion

Zeigt die Version der Common Language Runtime an.

EHInfo [<MethodDesc-Adresse>] [<Codeadresse>]

Zeigt die Ausnahmebehandlungsblöcke in einer angegebenen Methode an. Mit diesem Befehl werden die Codeadressen und Codeoffsets für den clause-Block (den try-Block) und den handler-Block (den catch-Block) angezeigt.

FAQ

Zeigt Häufig gestellte Fragen (FAQs) an.

FinalizeQueue [-detail] | [-allReady] [-short]

Zeigt alle Objekte an, die für die Finalisierung registriert sind.

  • Die -detail-Option zeigt zusätzliche Informationen zu allen SyncBlocks-Elementen an, die bereinigt werden müssen, und zu allen RuntimeCallableWrappers (RCWs) an, die auf die Bereinigung warten. Beide Datenstrukturen werden zwischengespeichert und bei der Ausführung durch den Finalizerthread bereinigt.

  • Die -allReady-Option zeigt alle Objekte an, die zum Abschließen bereit sind, unabhängig davon, ob sie bereits von der Garbage Collection entsprechend markiert wurden oder bei der nächsten Garbage Collection markiert werden. Die Objekte, die nicht in der Liste "zum Abschluss bereit" sind, sind finalisierbare Objekte, die keinen Stamm mehr haben. Diese Option kann sehr teuer sein, da sie überprüft, ob alle Objekte in den finalisierbaren Warteschlangen immer noch einen Stamm haben.

  • Die -short-Option schränkt die Ausgabe auf die Adresse eines jeden Objekts ein. Wenn es in Verbindung mit -allReady verwendet wird, listet es alle Objekte auf, die über einen Finalizer verfügen, der keinen Stamm mehr hat. Wenn es unabhängig verwendet wird, führt es alle Objekte in den finalisierbaren und "zum Abschluss bereit"-Warteschlangen auf.

FindAppDomain <Objektadresse>

Bestimmt die Anwendungsdomäne eines Objekts bei der angegebenen Adresse.

FindRoots -gen <N> | -gen any |<Objektadresse>

Bewirkt, dass der Debugger in der zu debuggenden Komponente auf der nächsten Auflistung der angegebenen Generierung einbricht. Der Effekt wird zurückgesetzt, sobald die Unterbrechung auftritt. Um auf der nächsten Auflistung zu unterbrechen, müssen Sie den Befehl neu herausbringen. Das <Objektadresse>-Formular dieses Befehls wird verwendet, nachdem die vom -gen verursachte Unterbrechung oder -gen any aufgetreten ist. Zu dieser Zeit hat die zu debuggende Komponente den richtigen Zustand für FindRoots, um Stämme für Objekte aus den aktuellen verurteilten Generierungen zu identifizieren.

GCHandles [-perdomain]

Zeigt Statistiken über Garbage Collector-Handles im Prozess an.

Durch das Übergeben der -perdomain-Option werden die Statistiken nach Anwendungsdomäne sortiert.

Verwenden Sie den Befehl GCHandles, um nach von Garbage Collector-Handleverlusten verursachten Speicherverlusten zu suchen. Ein Speicherverlust tritt beispielsweise auf, wenn Code ein großes Array beibehält, da ein starkes Garbage Collector-Handle noch darauf zeigt, und das Handle verworfen wird, ohne dass es freigegeben wurde.

GCHandleLeaks

Durchsucht den Speicher nach Verweisen auf starke und fixierte 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 Speicher gefunden wird, zeigt dieser Befehl eine Benachrichtigung an.

GCInfo <MethodDesc-Adresse><Codeadresse>

Zeigt Daten an, die angeben, ob Register oder Stapelspeicherorte verwaltete Objekte enthalten. Wenn eine Garbage Collection durchgeführt wird, muss der Garbage Collector die Speicherorte von Verweisen auf Objekte kennen, sodass sie mit neuen Objektzeigerwerten aktualisiert werden können.

GCRoot [-nostacks] <Objektadresse>

Zeigt Informationen zu Verweisen auf ein Objekt (oder Stämme eines Objekts) bei der angegebenen Adresse an.

Der Befehl GCRoot überprüft den gesamten verwalteten Heap und die Handletabelle nach Handles innerhalb anderer Objekte und Handles auf dem Stapel. Dann wird in jedem Stapel und auch in der Finalizerwarteschlange nach Zeigern auf Objekte gesucht.

Mit diesem Befehl wird nicht bestimmt, ob ein Stapelkopf gültig ist oder verworfen wird. Mit den Befehlen CLRStack und U disassemblieren Sie den Stapel, zu dem der lokale Wert oder der Argumentwert gehört, um zu bestimmen, ob der Stapelkopf noch in Verwendung ist.

Die -nostacks-Option beschränkt die Suche auf Garbage Collector-Handles und freachable-Objekte.

GCWhere <Objektadresse>

Zeigt den Speicherort und die Größe im Garbage Collection-Heap 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.

help [<command>] [faq]

Zeigt alle verfügbaren Befehle an, wenn kein Parameter festgelegt wurde, oder zeigt detaillierte Hilfeinformationen zum angegebenen Befehl an.

Der faq-Parameter 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 Generierung auf jedem Heap an. Wenn die -inclUnrooted-Option angegeben wird, enthält der Bericht Informationen zu den verwalteten Objekten aus dem Garbage Collection-Heap, der keinen Stamm mehr hat.

HistClear

Gibt alle von der Familie der Hist-Befehle verwendeten Ressourcen frei.

Im Allgemeinen müssen Sie HistClear nicht explizit aufrufen, da jeder HistInit die vorherigen Ressourcen bereinigt.

HistInit

Initialisiert die SOS-Strukturen vom Belastungsprotokoll, die in der zu debuggenden Komponente gespeichert wurden.

HistObj <obj_address>

Untersucht alle Aufzeichnungen von Belastungsprotokollverschiebungen und zeigt die Kette von Garbage Collection-Verschiebungen, die möglicherweise zu der als Argument übergebenen Adresse geführt haben.

HisttObjFind <obj_address>

Zeigt alle Protokolleinträge an, die auf ein Objekt bei der angegebenen Adresse verweisen.

HistRoot <root>

Zeigt Informationen sowohl zu Heraufstufungen als auch Verschiebungen des angegebenen Stamms an.

Der Stammwert kann verwendet werden, um die Bewegung eines Objekts durch die Garbage Collections zu verfolgen.

IP2MD <Codeadresse>

Zeigt die MethodDesc-Struktur bei der angegebenen Adresse in Code an, der gerade JIT-kompiliert (Just-In-Time) wurde.

ListNearObj (lno) <obj_address>

Zeigt die Objekte an, die der angegebenen Adresse vorausgehen und folgen. Der Befehl sucht nach der Adresse im Garbage Collection-Heap, die wie ein gültiger Anfang eines verwalteten Objekts aussieht (basiert auf einer gültigen Methodentabelle), und nach dem Objekt, das der Argumentadresse folgt.

MinidumpMode [0] [1]

Verhindert die Ausführung von unsicheren Befehlen, wenn ein Minidump verwendet wird.

Übergeben Sie 0, um dieses Feature zu deaktivieren, oder übergeben Sie 1, um dieses Feature zu aktivieren. Standardmäßig ist der MinidumpMode-Wert auf 0 festgelegt.

Minidumps, die mit dem Befehl .dump /m oder dem Befehl .dump erstellt wurde, enthalten eingeschränkte CLR-spezifische Daten und ermöglichen es Ihnen nur, eine Teilmenge der SOS-Befehle korrekt auszuführen. Manche Befehle können mit unerwarteten Fehlern fehlschlagen, da erforderliche Speicherbereiche nicht oder nur teilweise zugeordnet sind. Diese Option schützt Sie davor, unsichere Befehle gegen Minidumps auszuführen.

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 in den Prozess geladen werden.

Um den richtigen Typnamen abzurufen, durchsuchen Sie das Modul mit dem Ildasm.exe (MSIL Disassembler-Tool). Sie können auch * als Modulname-Parameter ü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 <module>!<type>. Der Typ muss ein vollqualifizierter Typ sein.

ObjSize [<Objektadresse>] | [-aggregate] [-stat]

Zeigt die Größe des angegebenen Objekts an. Wenn keine Parameter angegeben sind, werden mit dem Befehl ObjSize die Größe aller in verwalteten Threads gefundenen Objekte, alle Garbage Collector-Handles im Prozess sowie die Gesamtgröße aller Objekte, auf die diese Handles zeigen, angezeigt. Der Befehl ObjSize schließt die Größe aller untergeordneten Objekte zusätzlich zum übergeordneten Element ein.

Die -aggregate-Option kann in Verbindung mit dem -stat-Argument verwendet werden, um eine ausführliche Ansicht der Typen abzurufen, die noch immer einen Stamm haben. Mit !dumpheap -stat und !objsize -aggregate -stat können Sie bestimmen, welche Objekte keinen Stamm mehr haben und verschiedene Arbeitsspeicherprobleme diagnostizieren.

PrintException [-nested] [-lines] [<Ausnahmeobjektadresse>]

– oder –

PE [-nested] [<Ausnahmeobjektadresse>]

Zeigt Felder aller Objekte, die von der Exception-Klasse bei der angegebenen Adresse abgeleitet werden, und formatiert Felder dieser Objekte. Wenn Sie keine Adresse angeben, zeigt der Befehl PrintException die letzte Ausnahme an, die im aktuellen Thread ausgelöst wurde.

  • Die -nested-Option zeigt Details zu geschachtelten Ausnahmeobjekten an.

  • Die -lines-Option zeigt Quelleniinformationen, sofern verfügbar.

Sie können diesen Befehl verwenden, um das _stackTrace-Feld zu formatieren und anzuzeigen, 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 Speicherauslastungsstatistiken an.

RCWCleanupList <RCWCleanupList-Adresse>

Zeigt die Liste der Runtime Callable Wrappers, die auf Bereinigung warten, bei der angegebenen Adresse an.

SaveModule <Basisadresse> <Dateiname>

Schreibt ein Abbild, das bei der angegebenen Adresse in den Speicher geladen wird, in die angegebene Datei.

SOSFlush

Leert einen internen SOS-Cache.

StopOnException [-derived] [-create | -create2] <Ausnahme> <Pseudo-Registernummer>

Bewirkt, dass der Debugger bei Auslösung der angegebenen Ausnahme unterbricht, bei Auslösung aller anderen Ausnahmen jedoch weiter ausgeführt wird.

Die -derived-Option fängt die angegebene Ausnahme und jede Ausnahme ab, die von der angegebenen Ausnahme abgeleitet wird.

SyncBlk [-all | <syncblk-Zahl>]

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 sich im Besitz eines Threads befinden.

Eine SyncBlock-Struktur ist ein Container für zusätzliche Informationen, die nicht für jedes Objekt erstellt werden müssen. Sie kann COM-Interop-Daten, Hashcodes und Sperreninformationen für threadsichere Operationen enthalten.

ThreadPool

Zeigt Informationen zum verwalteten Threadpool an, darunter die Anzahl der Arbeitsanforderungen in der Warteschlange, die Anzahl der Threads zum "Abhören" des Completion Ports und die Anzahl der Timer.

Token2EE <Modulname> <Token>

Verwandelt das angegebene Metadatentoken im angegebenen Modul in eine MethodTable-Struktur oder MethodDesc-Struktur.

Sie können * für den Modulname-Parameter übergeben, um herauszufinden, welchem Element 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.

Threads [-live] [-special]

Zeigt alle verwalteten Threads im Prozess an.

Mit dem Befehl Threads werden die Kurzform der Debugger-ID, die Thread-ID der Common Language Runtime und die Thread-ID des Betriebssystems angezeigt. Darüber hinaus werden mit dem Befehl Threads eine Domänenspalte mit der Anwendungsdomäne für die Threadausführung, eine APT-Spalte mit dem COM-Apartmentmodus und eine Ausnahmespalte mit der letzten im Thread ausgelösten Ausnahme anzeigt.

  • Die -live-Option zeigt Threads an, die zu einem aktiven Thread gehören.

  • Die -special-Option zeigt alle von der CLR erstellten besonderen Threads an. Zu den besonderen Threads gehören Garbage Collection-Threads (in der gleichzeitigen GC und der Server-GC), Hilfsthreads des Debuggers, Finalizerthreads, AppDomain-Entladungsthreads und Zeitgeberthreads des Threadpools.

ThreadState <Zustandwertfeld>

Zeigt den Zustand des Threads an. Der value-Parameter der Wert des State-Felds in der Threads-Berichtsausgabe.

Beispiel:

    0:003> !Threads
    ThreadCount:      2
    UnstartedThread:  0
    BackgroundThread: 1
    PendingThread:    0
    DeadThread:       0
    Hosted Runtime:   no
                                          PreEmptive   GC Alloc           Lock
           ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
       0    1  250 0019b068      a020 Disabled 02349668:02349fe8 0015def0     0 MTA
       2    2  944 001a6020      b220 Enabled  00000000:00000000 0015def0     0 MTA (Finalizer)
    0:003> !ThreadState b220
        Legal to Join
        Background
        CLR Owns
        CoInitialized
        In Multi Threaded Apartment

TraverseHeap [-xml] <Dateiname>

Schreibt Heapinformationen in die angegebene Datei in einem Format, das vom CLR-Profiler verstanden wird. Die -xml-Option bewirkt, dass der Befehl TraverseHeap die Datei als XML-Datei formatiert.

Sie können den CLR-Profiler im Microsoft Download Center herunterladen.

U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <Code address>

Zeigt eine kommentierte 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 Methode vom Anfang bis zum Ende mit Kommentaren angezeigt, die Metadatentoken in Namen umwandeln.

  • Die -gcinfo-Option bewirkt, dass der Befehl U die GCInfo-Struktur für die Methode anzeigt.

  • Die -ehinfo-Option zeigt Ausnahmeinformationen für die Methode an. Sie können diese Informationen auch mit dem Befehl EHInfo abrufen.

  • Die -n-Option deaktiviert die Anzeige von Quelldateinamen und Zeilennummern. Wenn für den Debugger die Option SYMOPT_LOAD_LINES angegeben ist, sucht SOS nach den Symbolen für jeden verwalteten Frame und zeigt im Erfolgsfall den entsprechenden Quelldateinamen und die 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ädigung und zeigt alle gefundenen Fehler an.

Heapbeschädigungen können von Plattformaufrufen verursacht werden, die nicht korrekt erstellt wurden.

VerifyObj <Objektadresse>

Überprüft das Objekt, das als Argument für Anzeichen der Beschädigung übergeben wird.

VMMap

Durchläuft den virtuellen Adressenbereich und zeigt den Typ des Schutzes an, der auf jeden Bereich angewendet wird.

VMStat

Bietet eine Zusammenfassungsansicht des virtuellen Adressbereichs, geordnet nach allen Arten des Schutzes für den Speicher (frei, reserviert, zugesichert, privat, zugeordnet, Abbild). Die Spalte TOTAL zeigt das Ergebnis der Spalte AVERAGE multipliziert mit der Spalte BLK COUNT an.

Hinweise

Wenn Sie die SOS-Debugerweiterung verwenden möchten, laden Sie diese in Visual Studio oder in den WinDbg.exe-Debugger, der auch auf der WDK- und Entwicklertools-Website verfügbar ist. Befehle können Sie in WinDgb.exe oder im Direktfenster von Visual Studio ausführen.

Die SOS-Debugerweiterung ermöglicht es Ihnen, Informationen zu Code anzuzeigen, der in der Common Language Runtime ausgeführt wird. Sie können zum Beispiel die SOS-Debugerweiterung verwenden, um Informationen zum verwalteten Heap anzuzeigen, nach Heapbeschädigungen zu suchen, interne Datentypen anzuzeigen, die von der CLR verwendet werden, und um Informationen zu jeglichem verwalteten Code anzuzeigen, der innerhalb der CLR ausgeführt wird.

Laden der SOS-Debugerweiterung

Zum Laden der SOS-Debugerweiterungen in den Debugger WinDbg.exe führen Sie den folgenden Befehl im Tool aus:

.loadby sos clr

Zum Laden der SOS-Debugerweiterung in Visual Studio führen Sie den folgenden Befehl während des Debuggens im Direktfenster aus:

.load SOS.dll

Bei erfolgreicher Befehlsausführung wird im Direktfenster die folgende Meldung zurückgegeben:

extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded

Sie müssen nicht verwaltetes Debuggen in den Projekteinstellungen Ihrer Lösung aktivieren, bevor Sie die SOS-Debugerweiterung laden können. Für einige Sprachen ist nicht verwaltetes Debuggen standardmäßig deaktiviert. Auf einigen Plattformen sind Debugverwaltung und nicht verwalteter Code nicht gleichzeitig erlaubt.

HinweisHinweis

Zeigen Sie im Menü Debuggen auf Fenster, und klicken Sie dann auf Direkt, um das Direktfenster anzuzeigen.Das Direktfenster in Visual Studio können Sie auch öffnen, indem Sie STRG+ALT+I drücken.

WinDbg.exe und Visual Studio verwenden eine Version von SOS.dll, die der derzeit verwendeten Version von Mscorwks.dll entspricht. In .NET Framework, Versionen 1.1 und 2.0, wird SOS.dll in demselben Verzeichnis wie Mscorwks.dll installiert. Standardmäßig sollten Sie die Version von SOS.dll verwenden, die der aktuellen Version von Mscorwks.dll entspricht.

Wenn Sie eine Dumpdatei verwenden möchten, die auf einem anderen Computer erstellt wurde, vergewissern Sie sich, dass sich die Datei Mscorwks.dll, die mit dieser Installation geliefert wurde, in Ihrem Symbolpfad befindet, und laden Sie dann die entsprechende Version von SOS.dll.

Um eine bestimmte Version von SOS.dll zu laden, geben Sie im Windows-Debugger den folgenden Befehl ein:

.load <full path to sos.dll>

Beispiele

Der folgende Befehl zeigt den Inhalt eines Arrays bei der Adresse 00ad28d0 an. Die Anzeige beginnt beim zweiten Element und wird für fünf Elemente fortgesetzt.

!dumparray -start 2 -length 5 -detail 00ad28d0 

Der folgende Befehl zeigt den Inhalt einer Assembly bei der Adresse 1ca248 an.

!dumpassembly 1ca248

Der folgende Befehl zeigt Informationen zum Garbage Collector-Heap an.

!dumpheap

Der folgende Befehl schreibt den Inhalt des speicherresidenten Belastungsprotokolls in die (Standard-)Datei namens StressLog.txt im aktuellen Verzeichnis.

!DumpLog

Der folgende Befehl zeigt die MethodDesc-Struktur bei der Adresse 902f40 an.

!dumpmd 902f40

Der folgende Befehl zeigt Informationen zu einem Modul bei der Adresse 1caa50 an.

!dumpmodule 1caa50

Der folgende Befehl zeigt Informationen zu einem Objekt bei der Adresse a79d40 an.

!DumpObj a79d40

Der folgende Befehl zeigt die Felder einer Wertklasse bei der Adresse 00a79d9c an, wobei die Methodentabelle bei der Adresse 0090320c verwendet wird.

!DumpVC 0090320c 00a79d9c

Der folgende Befehl zeigt den vom Garbage Collector verwendeten Prozessspeicher an.

!eeheap -gc

Der folgende Befehl zeigt alle Objekte an, für die Finalisierung geplant ist.

!finalizequeue

Der folgende Befehl bestimmt die Anwendungsdomäne eines Objekts bei der Adresse 00a79d98.

!findappdomain 00a79d98

Der folgende Befehl zeigt alle Garbage Collector-Handles im aktuellen Prozess an.

!gcinfo 5b68dbb8 

Mit dem folgenden Befehl werden die MethodTable-Struktur und die EEClass-Struktur für die Main-Methode in der Klasse MainClass im Modul unittest.exe angezeigt.

!name2ee unittest.exe MainClass.Main

Der folgende Befehl zeigt Informationen zum Metadatentoken bei der Adresse 02000003 im Modul unittest.exe an.

!token2ee unittest.exe 02000003

Siehe auch

Referenz

Visual Studio- und Windows SDK-Eingabeaufforderungen

Weitere Ressourcen

.NET Framework-Tools

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

April 2011

Hinzugefügte Informationen zur Verwendung der Visual Studio- und Windows SDK-Eingabeaufforderungen.

Informationsergänzung.