Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel bezieht sich auf: ✔️ dotnet-debug Version 0.0.710501 und höhere Versionen
Hinweis
dotnet-debug Unterstützt derzeit nur CoreCLR-basierte Anwendungen und wird derzeit unter macOS nicht unterstützt.
Install
Verwenden Sie zum Installieren der neuesten Releaseversion des dotnet-debug den Befehl dotnet tool install:
dotnet tool install --global dotnet-debug
Zusammenfassung
dotnet-debug [-h|--help] [--version] <command>
Description
Mit dem dotnet-debug globalen Tool können Sie live .NET-Prozesse anfügen und Dumpdateien interaktiv analysieren. Im Gegensatz dazu dotnet-dump, der schwerpunktmäßig auf Die Dumpsammlung und Offlineanalyse liegt, dotnet-debug ist für die Live-Prozessüberprüfung vorgesehen. Es unterstützt alle gleichen SOS-Debuggingbefehle wie dotnet-dump.
Dieses Tool ist auf Plattformen wie Alpine Linux nützlich, wo eine voll funktionsfähige Funktion lldb nicht verfügbar ist. Das dotnet-debug Tool führt SOS-Befehle aus, um verwalteten Zustand und Heapdiagnose zu analysieren, ist aber kein systemeigener Debugger, sodass das Anzeigen nativer Stapelframes nicht unterstützt wird.
Options
--versionZeigt die Version des dotnet-debug-Hilfsprogramms an.
-h|--helpZeigt die Hilfe für die Befehlszeile an.
Befehle
| Command |
|---|
| dotnet-debug attach |
| dotnet-debug open-dump |
dotnet-debug attach
Fügt an einen Liveprozess an und startet eine interaktive Shell mit Debuggingbefehlen, um ihn zu erkunden.
Zusammenfassung
dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]
Arguments
<process-id>Die Prozess-ID zum Anfügen und Analysieren.
Options
-c|--commands <debug_command>Führt die Befehle beim Start aus. Mehrere Instanzen dieses Parameters können in einem Aufruf zum Verketten von Befehlen verwendet werden. Befehle werden in der Reihenfolge ausgeführt, in der sie in der Befehlszeile bereitgestellt werden. Wenn Sie nach den Befehlen beenden möchten
dotnet-debug, sollte der letzte Befehl seinexit.--accept-license-agreementAkzeptiert den Lizenzvertrag ohne Aufforderung.
Example
Anfügen an einen laufenden Prozess mit ID 1234:
$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Führen Sie einen Befehl beim Anfügen aus, und beenden Sie dann Folgendes:
dotnet-debug attach 1234 -c clrstack -c exit
dotnet-debug open-dump
Startet eine interaktive Shell mit Debuggingbefehlen, um eine Speicherabbilddatei zu erkunden.
Zusammenfassung
dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]
Arguments
<dump_path>Der Pfad zur zu analysierenden Speicherabbilddatei.
Options
-c|--commands <debug_command>Führt die Befehle beim Start aus. Mehrere Instanzen dieses Parameters können in einem Aufruf zum Verketten von Befehlen verwendet werden. Befehle werden in der Reihenfolge ausgeführt, in der sie in der Befehlszeile bereitgestellt werden. Wenn Sie nach den Befehlen beenden möchten
dotnet-debug, sollte der letzte Befehl seinexit.--accept-license-agreementAkzeptiert den Lizenzvertrag ohne Aufforderung.
Example
Öffnen und Analysieren einer Speicherabbilddatei:
$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Debuggen von SOS-Befehlen
Sowohl die Befehle als attach auch die open-dump Befehle rufen eine interaktive Sitzung auf, die die folgenden SOS-Befehle akzeptiert.
| Command | Funktion |
|---|---|
analyzeoom |
Zeigt Informationen zum letzten OOM-Ereignis an, das bei einer Speicherbelegungsanforderung an den Garbage Collection-Heap aufgetreten ist. |
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. |
d oder readmemory |
Sichert Arbeitsspeicherinhalte. |
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 allgemeine Zwischensprache (CIL) 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 GC-Heap und druckt den Typnamen und die MethodTable, 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. |
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. |
exit oder quit |
Beendet den interaktiven Modus. |
finalizequeue |
Zeigt alle für den Abschluss registrierten Objekte an. |
findappdomain |
Versucht, die Anwendungsdomäne eines Garbage Collection-Objekts aufzulösen. |
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 Stressprotokollverlagerungsdatensätze und zeigt die Kette von Garbage Collection-Verlagerungen an, die möglicherweise zu der als Argument übergebenen Adresse geführt haben. |
histobjfind |
Zeigt alle Protokolleinträge an, die auf das Objekt 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. |
logopen |
Aktiviert die Protokollierung der Konsolendatei. |
logclose |
Deaktiviert die Protokollierung der Konsolendatei. |
logging |
Aktiviert/deaktiviert die interne SOS-Protokollierung. |
lm oder modules |
Zeigt die nativen Module im Prozess an. |
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 oder printexception |
Zeigt die Felder jedes Objekts an, das bei der angegebenen Adresse von der Exception-Klasse abgeleitet wird, und formatiert diese Felder. |
r oder registers |
Zeigt die Register des Threads an. |
runtimes |
Listet die Runtimes im Ziel auf oder ändert die Standardruntime. |
setclrpath |
Legt den Pfad zum Laden von CoreCLR-DAC/DBI-Dateien mithilfe von setclrpath <path> fest. |
setsymbolserver |
Aktiviert Unterstützung für den Symbolserver. |
sos |
Führt verschiedene CoreCLR-Debugbefehle aus. Verwenden Sie die Syntax sos <command-name> <args>. Für weitere Informationen verwenden Sie soshelp. |
soshelp oder help |
Zeigt alle verfügbaren Befehle an. |
soshelp <command> oder help <command> |
Zeigt den angegebenen Befehl an. |
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. |
threads <threadid> oder setthread <threadid> |
Legt die ID des aktuellen Threads für die SOS-Befehle fest oder zeigt diese an. |
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. |
Hinweis
Weitere Informationen finden Sie unter SOS Debugging Extension für .NET.
Wird dotnet-debug verwendet, um an einen Liveprozess anzufügen
Das folgende Beispiel zeigt, wie Sie an einen ausgeführten .NET-Prozess anfügen und ein Threadpoolproblem untersuchen:
$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Durch diese Aktion wird eine interaktive Sitzung aufgerufen, die Befehle wie die folgenden akzeptiert:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])
So zeigen Sie eine unbehandelte Ausnahme an:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d
StackTraceString: <none>
HResult: 80131604
dotnet-debug Vs dotnet-dump
dotnet-debug und dotnet-dump verwenden Sie dieselben SOS-Debuggingbefehle, dienen jedoch verschiedenen primären Zwecken:
| Merkmal | dotnet-debug |
dotnet-dump |
|---|---|---|
| Anfügen an einen Liveprozess | ✔️ | ❌ |
| Sammeln von Dumps | ❌ | ✔️ |
| Analysieren von Speicherabbilddateien | ✔️ | ✔️ |
.NET-Prozesse auflisten (ps) |
❌ | ✔️ |
Verwenden Sie dotnet-debug diesen Vorgang, wenn Sie einen Liveprozess interaktiv debuggen müssen. Verwenden Sie dotnet-dump diese, wenn Sie Dumps sammeln oder offline analysieren müssen.