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:
|
CLRStack [-a] [-l] [-p] [-n] |
Stellt eine Stapelüberwachung ausschließlich für verwalteten Code bereit.
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.
|
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.
|
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.
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:
|
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.
|
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.
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.
|
ThreadState <Zustandwertfeld> |
Zeigt den Zustand des Threads an. Der value-Parameter der Wert des State-Felds in der Threads-Berichtsausgabe. Beispiel:
|
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.
|
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.
Hinweis |
---|
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
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
April 2011 |
Hinzugefügte Informationen zur Verwendung der Visual Studio- und Windows SDK-Eingabeaufforderungen. |
Informationsergänzung. |