Dumpinsamlings- och analysverktyg (dotnet-dump)
Den här artikeln gäller för version ✔️ dotnet-dump
3.0.47001 och senare versioner
Kommentar
dotnet-dump
för macOS stöds endast med .NET 5 och senare versioner.
Installera
Det finns två sätt att ladda ned och installera dotnet-dump
:
dotnet global tool:
Om du vill installera den senaste versionen av
dotnet-dump
NuGet-paketet använder du installationskommandot för dotnet-verktyget:dotnet tool install --global dotnet-dump
Direkt nedladdning:
Ladda ned det körbara verktyget som matchar din plattform:
OS Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Kommentar
Om du vill använda dotnet-dump
en x86-app behöver du en motsvarande x86-version av verktyget.
Sammanfattning
dotnet-dump [-h|--help] [--version] <command>
beskrivning
Det dotnet-dump
globala verktyget är ett sätt att samla in och analysera dumpar i Windows, Linux och macOS utan inbyggt felsökningsprogram. Det här verktyget är viktigt på plattformar som Alpine Linux där en fullt fungerande lldb
inte är tillgänglig. Med dotnet-dump
verktyget kan du köra SOS-kommandon för att analysera krascher och skräpinsamlaren (GC), men det är inte ett internt felsökningsprogram, så saker som att visa interna stackramar stöds inte.
Alternativ
--version
Visar versionen av verktyget dotnet-dump.
-h|--help
Visar kommandoradshjälp.
Kommandon
Command |
---|
dotnet-dump collect |
dotnet-dump analyze |
dotnet-dump ps |
dotnet-dump collect
Samlar in en dump från en process.
Sammanfattning
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Alternativ
-h|--help
Visar kommandoradshjälp.
-p|--process-id <PID>
Anger det process-ID-nummer som ska samlas in från en dump.
-n|--name <name>
Anger namnet på den process som en dump ska samlas in från.
--type <Full|Heap|Mini>
Anger dumptypen som avgör vilken typ av information som samlas in från processen. Det finns tre typer:
Full
– Den största dumpen som innehåller allt minne, inklusive modulbilderna.Heap
– En stor och relativt omfattande dump som innehåller modullistor, trådlistor, alla staplar, undantagsinformation, hantera information och allt minne förutom mappade bilder.Mini
– En liten dump som innehåller modullistor, trådlistor, undantagsinformation och alla staplar.
Om det inte anges
Full
är standardvärdet.-o|--output <output_dump_path>
Den fullständiga sökvägen och filnamnet där den insamlade dumpen ska skrivas. Kontrollera att användaren som dotnet-processen körs under har skrivbehörighet till den angivna katalogen.
Om det inte anges:
- Standardvärdet är .\dump_YYYYMMDD_HHMMSS.dmp i Windows.
- Standardvärdet är ./core_YYYYMMDD_HHMMSS på Linux och macOS.
YYYYMMDD är år/månad/dag och HHMMSS är timme/minut/sekund.
--diag
Aktiverar diagnostikloggning för dumpsamling.
--crashreport
Aktiverar generering av kraschrapporter.
Kommentar
I Linux och macOS förväntar sig det här kommandot målprogrammet och dotnet-dump
delar samma TMPDIR
miljövariabel. Annars överskrider kommandot tidsgränsen.
Kommentar
För att samla in en dump med måste dotnet-dump
den köras som samma användare som användaren som kör målprocessen eller som rot. Annars kan verktyget inte upprätta en anslutning till målprocessen.
dotnet-dump analyze
Startar ett interaktivt gränssnitt för att utforska en dump. Gränssnittet accepterar olika SOS-kommandon.
Sammanfattning
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argument
<dump_path>
Anger sökvägen till dumpfilen som ska analyseras.
Alternativ
-c|--command <debug_command>
Kör kommandot vid start. Flera instanser av den här parametern kan användas i ett anrop till kedjekommandon. Kommandon körs i den ordning som de tillhandahålls på kommandoraden. Om du vill att dotnet-dumpen ska avslutas efter kommandona ska det sista kommandot vara "exit".
Analysera SOS-kommandon
Command | Funktion |
---|---|
analyzeoom |
Visar information om den senaste OOM som inträffade på en allokeringsbegäran till GC-heapen. |
clrmodules |
Visar en lista över de hanterade modulerna i processen. |
clrstack |
Tillhandahåller endast en stackspårning av hanterad kod. |
clrthreads |
Visar en lista över de hanterade trådar som körs. |
clru |
Visar en kommenterad demontering av en hanterad metod. |
d eller readmemory |
Dumpar minnesinnehåll. |
dbgout |
Aktiverar/inaktiverar (-off ) intern SOS-loggning. |
dso |
Visar alla hanterade objekt som finns inom gränserna för den aktuella stacken. |
dumpalc |
Visar information om en samlande sammansättningLoadContext som det angivna objektet läses in till. |
dumparray |
Visar information om en hanterad matris. |
dumpasync |
Visar information om asynkrona tillståndsdatorer på den skräpinsamlade heapen. |
dumpassembly |
Visar information om en sammansättning. |
dumpclass |
Visar information om EEClass strukturen på den angivna adressen. |
dumpconcurrentdictionary |
Visar samtidigt ordlisteinnehåll. |
dumpconcurrentqueue |
Visar innehåll i samtidig kö. |
dumpdelegate |
Visar information om ett ombud. |
dumpdomain |
Visar information om alla sammansättningar i alla AppDomains eller den angivna. |
dumpgcdata |
Visar information om GC-data. |
dumpgen |
Visar heapinnehåll för den angivna generationen. |
dumpheap |
Visar information om den skräpsamlade heapen och insamlingsstatistiken om objekt. |
dumpil |
Visar det gemensamma mellanliggande språket (CIL) som är associerat med en hanterad metod. |
dumplog |
Skriver innehållet i en minnesintern stresslogg till den angivna filen. |
dumpmd |
Visar information om MethodDesc strukturen på den angivna adressen. |
dumpmodule |
Visar information om modulen på den angivna adressen. |
dumpmt |
Visar information om metodtabellen på den angivna adressen. |
dumpobj |
Visar information om objektet på den angivna adressen. |
dumpruntimetypes |
Hittar alla System.RuntimeType-objekt i GC-heapen och skriver ut typnamnet och MethodTable som de också refererar till. |
dumpsig |
Dumpar signaturen för en metod eller ett fält som anges av <sigaddr> <moduleaddr> . |
dumpsigelem |
Dumpar ett enda element i ett signaturobjekt. |
dumpstackobjects |
Visar alla hanterade objekt som finns inom gränserna för den aktuella stacken. |
dumpvc |
Visar information om fälten i en värdeklass. |
eeheap |
Visar information om processminne som förbrukas av interna körningsdatastrukturer. |
eestack |
Körs dumpstack på alla trådar i processen. |
eeversion |
Visar information om körnings- och SOS-versioner. |
ehinfo |
Visar undantagshanteringsblocken i en JIT-ed-metod. |
exit eller quit |
Avslutar interaktivt läge. |
finalizequeue |
Visar alla objekt som registrerats för slutförande. |
findappdomain |
Försöker lösa AppDomain för ett GC-objekt. |
gchandles |
Visar statistik om skräpinsamlingshandtag i processen. |
gcheapstat |
Visar statistik om skräpinsamlare. |
gcinfo |
Visar JIT GC-kodningen för en metod. |
gcroot |
Visar information om referenser (eller rötter) till objektet på den angivna adressen. |
gcwhere |
Visar platsen i GC-heapen för den angivna adressen. |
histclear |
Frigör alla resurser som används av Hist-kommandonas familj. |
histinit |
Initierar SOS-strukturerna från stressloggen som sparats i felsökningsrutan. |
histobj |
Undersöker alla flyttposter för stressloggar och visar kedjan med skräpinsamlingsflyttar som kan ha lett till den adress som skickades som ett argument. |
histobjfind |
Visar alla loggposter som refererar till objektet på den angivna adressen. |
histroot |
Visar information som rör både kampanjer och omlokaliseringar av den angivna roten. |
histstats |
Visar stressloggstatistik. |
ip2md |
MethodDesc Visar strukturen på den angivna adressen i koden som har JIT-kompilerats. |
listnearobj |
Visar objektet som föregår och lyckas med den angivna adressen. |
logopen |
Aktiverar loggning av konsolfiler. |
logclose |
Inaktiverar loggning av konsolfiler. |
logging |
Aktiverar/inaktiverar intern SOS-loggning. |
lm eller modules |
Visar de inbyggda modulerna i processen. |
name2ee |
Visar strukturerna MethodTable och EEClass för den angivna typen eller metoden i den angivna modulen. |
objsize |
Visar storleken på det angivna objektet. |
parallelstacks |
Visar den sammanfogade trådstacken på samma sätt som panelen Parallella staplar i Visual Studio. |
pathto |
Visar GC-sökvägen från <root> till <target> . |
pe eller printexception |
Visar och formaterar fält för alla objekt som härletts från Exception klassen på den angivna adressen. |
r eller registers |
Visar trådens register. |
runtimes |
Visar en lista över körningsvärdena i målet eller ändrar standardkörningen. |
setclrpath |
Anger sökvägen för att läsa in coreclr dac/dbi-filer med hjälp av setclrpath <path> . |
setsymbolserver |
Aktiverar symbolserverns stöd. |
sos |
Kör olika coreclr-felsökningskommandon. Använd syntaxen sos <command-name> <args> . Mer information finns i "soshelp". |
soshelp eller help |
Visar alla tillgängliga kommandon. |
soshelp <command> eller help <command> |
Visar det angivna kommandot. |
syncblk |
Visar info om SyncBlock-innehavare. |
taskstate |
Visar ett uppgiftstillstånd i ett läsbart format för människor. |
threadpool |
Visar information om körningstrådspoolen. |
threadpoolqueue |
Visar arbetsobjekt för i köade trådpooler. |
threadstate |
Skriver ut innebörden av ett trådtillstånd. |
threads <threadid> eller setthread <threadid> |
Anger eller visar aktuellt tråd-ID för SOS-kommandona. |
timerinfo |
Visar information om körningstimers. |
token2ee |
Visar MethodTable-strukturen och MethodDesc-strukturen för den angivna token och modulen. |
traverseheap |
Skriver ut heap-information till en fil i ett format som förstås av CLR Profiler. |
verifyheap |
Kontrollerar GC-heapen efter tecken på skada. |
verifyobj |
Kontrollerar objektet som skickas som ett argument för tecken på skada. |
Kommentar
Ytterligare information finns i SOS-felsökningstillägget för .NET.
dotnet-dump ps
Visar en lista över de dotnet-processer som dumpar kan samlas in från.
dotnet-dump
Version 6.0.320703 och senare versioner visar även de kommandoradsargument som varje process startades med, om den är tillgänglig.
Sammanfattning
dotnet-dump ps [-h|--help]
Exempel
Anta att du startar en tidskrävande app med kommandot dotnet run --configuration Release
. I ett annat fönster kör dotnet-dump ps
du kommandot . Utdata visas på följande sätt. Eventuella kommandoradsargument visas i dotnet-dump
version 6.0.320703 och senare.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Använda dotnet-dump
Det första steget är att samla in en dump. Det här steget kan hoppas över om en kärndump redan har genererats. Operativsystemet eller .NET Core-körningens inbyggda dumpgenereringsfunktion kan var och en skapa kärndumpar.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Analysera nu kärndumpningen analyze
med kommandot :
$ dotnet-dump analyze ./core_20190226_135850
Loading core dump: ./core_20190226_135850
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.
>
Den här åtgärden ger en interaktiv session som accepterar kommandon som:
> 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) [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[]) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
00007FFD28B43210 00007fb22aa9cedf [GCFrame: 00007ffd28b43210]
00007FFD28B43610 00007fb22aa9cedf [GCFrame: 00007ffd28b43610]
Så här ser du ett ohanterat undantag som dödade din app:
> 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 [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.dll!SymbolTestApp.Program.Foo2(Int32, System.String)+0x34 [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.dll!SymbolTestApp.Program.Foo1(Int32, System.String)+0x3a [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.dll!SymbolTestApp.Program.Main(System.String[])+0x6e [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
StackTraceString: <none>
HResult: 80131604
Felsöka problem med dumpinsamling
Dumpinsamling kräver att processen kan anropa ptrace
. Om du har problem med att samla in dumpar kan den miljö som du kör på konfigureras för att begränsa sådana anrop. Se våra dumpar: Vanliga frågor och svar om felsökningstips och potentiella lösningar på vanliga problem.