Dela via


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:

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-dumpden 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.

Se även