Hulpprogramma voor dumpverzameling en -analyse (dotnet-dump)
Dit artikel is van toepassing op: ✔️ dotnet-dump
versie 3.0.47001 en nieuwere versies
Notitie
dotnet-dump
voor macOS wordt alleen ondersteund met .NET 5 en nieuwere versies.
Installeren
Er zijn twee manieren om te downloaden en installeren dotnet-dump
:
dotnet global tool:
Als u de nieuwste versie van het NuGet-pakket wilt installeren, gebruikt u de installatieopdracht van het
dotnet-dump
dotnet-hulpprogramma:dotnet tool install --global dotnet-dump
Directe download:
Download het uitvoerbare hulpprogramma dat overeenkomt met uw platform:
Besturingssysteem Platform Windows x86 x64 | Arm-x64 | | Linux x64 | Arm64 | | musl-x64 | musl-Arm64
Notitie
Als u een x86-app wilt gebruiken dotnet-dump
, hebt u een bijbehorende x86-versie van het hulpprogramma nodig.
Samenvatting
dotnet-dump [-h|--help] [--version] <command>
Beschrijving
Het dotnet-dump
globale hulpprogramma is een manier om dumps te verzamelen en te analyseren in Windows, Linux en macOS zonder dat er een systeemeigen foutopsporingsprogramma betrokken is. Dit hulpprogramma is belangrijk op platforms zoals Alpine Linux, waar een volledig werkende lldb
versie niet beschikbaar is. Met dotnet-dump
het hulpprogramma kunt u SOS-opdrachten uitvoeren om crashes en de garbagecollector (GC) te analyseren, maar het is geen systeemeigen foutopsporingsprogramma, zodat het weergeven van systeemeigen stackframes niet wordt ondersteund.
Opties
--version
Geeft de versie van het dotnet-dump-hulpprogramma weer.
-h|--help
Toont opdrachtregelhulp.
Opdracht
Opdracht |
---|
dotnet-dump collect |
dotnet-dump analyseren |
dotnet-dump ps |
dotnet-dump collect
Legt een dump vast van een proces.
Samenvatting
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Opties
-h|--help
Toont opdrachtregelhulp.
-p|--process-id <PID>
Hiermee geeft u het proces-id-nummer voor het verzamelen van een dump van.
-n|--name <name>
Hiermee geeft u de naam van het proces voor het verzamelen van een dump van.
--type <Full|Heap|Mini>
Hiermee geeft u het dumptype op, waarmee wordt bepaald welke soorten informatie uit het proces worden verzameld. Er zijn drie typen:
Full
- De grootste dump met alle geheugen inclusief de module-installatiekopieën.Heap
- Een grote en relatief uitgebreide dump met modulelijsten, threadlijsten, alle stacks, uitzonderingsinformatie, handle-informatie en alle geheugen, met uitzondering van toegewezen afbeeldingen.Mini
- Een kleine dump met modulelijsten, threadlijsten, uitzonderingsgegevens en alle stacks.
Als dit niet is opgegeven,
Full
is dit de standaardwaarde.-o|--output <output_dump_path>
Het volledige pad en de bestandsnaam waarin de verzamelde dump moet worden geschreven. Zorg ervoor dat de gebruiker waaronder het dotnet-proces wordt uitgevoerd schrijfmachtigingen heeft voor de opgegeven map.
Als dit niet is opgegeven:
- Standaard ingesteld op .\dump_YYYYMMDD_HHMMSS.dmp in Windows.
- Standaard ingesteld op ./core_YYYYMMDD_HHMMSS in Linux en macOS.
JJJJMMDD is Year/Month/Day en HHMMSS is Hour/Minute/Second.
--diag
Hiermee schakelt u diagnostische logboekregistratie van dumpverzamelingen in.
--crashreport
Hiermee schakelt u het genereren van crashrapporten in.
Notitie
In Linux en macOS verwacht deze opdracht de doeltoepassing en dotnet-dump
deelt deze dezelfde TMPDIR
omgevingsvariabele. Anders treedt er een time-out op voor de opdracht.
Notitie
Als u een dump wilt verzamelen met behulp van dotnet-dump
, moet deze worden uitgevoerd als dezelfde gebruiker als het doelproces van de gebruiker of als root. Anders kan het hulpprogramma geen verbinding maken met het doelproces.
dotnet-dump analyseren
Start een interactieve shell om een dump te verkennen. De shell accepteert verschillende SOS-opdrachten.
Samenvatting
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argumenten
<dump_path>
Hiermee geeft u het pad naar het dumpbestand dat moet worden geanalyseerd.
Opties
-c|--command <debug_command>
Hiermee voert u de opdracht uit bij het starten. Meerdere exemplaren van deze parameter kunnen worden gebruikt in een aanroep om opdrachten te koppelen. Opdrachten worden uitgevoerd in de volgorde waarin ze zijn opgegeven op de opdrachtregel. Als u wilt dat dotnetdump na de opdrachten wordt afgesloten, moet de laatste opdracht 'exit' zijn.
SOS-opdrachten analyseren
Opdracht | Functie |
---|---|
analyzeoom |
Geeft de informatie weer van de laatste OOM die is opgetreden bij een toewijzingsaanvraag voor de GC-heap. |
clrmodules |
Geeft een lijst weer van de beheerde modules in het proces. |
clrstack |
Biedt alleen een stacktracering van beheerde code. |
clrthreads |
Geeft een lijst weer van de beheerde threads die worden uitgevoerd. |
clru |
Geeft een geannoteerde demontage van een beheerde methode weer. |
d of readmemory |
Dumpt geheugeninhoud. |
dbgout |
Hiermee schakelt u () interne SOS-logboekregistratie in-off of uit. |
dso |
Geeft alle beheerde objecten weer die binnen de grenzen van de huidige stack zijn gevonden. |
dumpalc |
Geeft details weer over een collectible AssemblyLoadContext waarnaar het opgegeven object wordt geladen. |
dumparray |
Geeft details weer over een beheerde matrix. |
dumpasync |
Geeft informatie weer over asynchrone statusmachines op de door garbage verzamelde heap. |
dumpassembly |
Geeft details weer over een assembly. |
dumpclass |
Geeft informatie weer over de EEClass structuur op het opgegeven adres. |
dumpconcurrentdictionary |
Geeft gelijktijdige woordenlijstinhoud weer. |
dumpconcurrentqueue |
Geeft gelijktijdige wachtrijinhoud weer. |
dumpdelegate |
Geeft informatie weer over een gemachtigde. |
dumpdomain |
Geeft informatie weer over de alle assembly's binnen alle AppDomains of de opgegeven. |
dumpgcdata |
Geeft informatie weer over de GC-gegevens. |
dumpgen |
Geeft heap-inhoud weer voor de opgegeven generatie. |
dumpheap |
Geeft informatie weer over de verzamelde heap- en verzamelingsstatistieken over objecten. |
dumpil |
Geeft de algemene tussenliggende taal (CIL) weer die is gekoppeld aan een beheerde methode. |
dumplog |
Hiermee schrijft u de inhoud van een stresslogboek in het geheugen naar het opgegeven bestand. |
dumpmd |
Geeft informatie weer over de MethodDesc structuur op het opgegeven adres. |
dumpmodule |
Geeft informatie weer over de module op het opgegeven adres. |
dumpmt |
Geeft informatie weer over de methodetabel op het opgegeven adres. |
dumpobj |
Geeft informatie weer over het object op het opgegeven adres. |
dumpruntimetypes |
Hiermee vindt u alle System.RuntimeType-objecten in de GC-heap en worden ook de typenaam en MethodTable afgedrukt. |
dumpsig |
Dumpt de handtekening van een methode of veld dat is opgegeven door <sigaddr> <moduleaddr> . |
dumpsigelem |
Dumpt één element van een handtekeningobject. |
dumpstackobjects |
Geeft alle beheerde objecten weer die binnen de grenzen van de huidige stack zijn gevonden. |
dumpvc |
Geeft informatie weer over de velden van een waardeklasse. |
eeheap |
Geeft informatie weer over procesgeheugen dat wordt verbruikt door interne runtimegegevensstructuren. |
eestack |
Wordt dumpstack uitgevoerd op alle threads in het proces. |
eeversion |
Geeft informatie weer over de runtime- en SOS-versies. |
ehinfo |
Geeft de afhandelingsblokken voor uitzonderingen weer in een JIT-methode. |
exit of quit |
Hiermee wordt de interactieve modus afgesloten. |
finalizequeue |
Geeft alle objecten weer die zijn geregistreerd voor de voltooien. |
findappdomain |
Probeert het AppDomain van een GC-object op te lossen. |
gchandles |
Geeft statistieken weer over garbagecollection-ingangen in het proces. |
gcheapstat |
Geeft statistieken weer over garbagecollection. |
gcinfo |
Geeft de JIT GC-codering voor een methode weer. |
gcroot |
Geeft informatie weer over verwijzingen (of wortels) naar het object op het opgegeven adres. |
gcwhere |
Geeft de locatie weer in de GC-heap van het opgegeven adres. |
histclear |
Publiceert alle resources die worden gebruikt door de familie van Hist-opdrachten. |
histinit |
Initialiseert de SOS-structuren uit het stresslogboek dat is opgeslagen in de foutopsporing. |
histobj |
Onderzoekt alle herlocatierecords van stresslogboeken en toont de keten van garbagecollectionverplaatsingen die mogelijk hebben geleid tot het adres dat als argument is doorgegeven. |
histobjfind |
Geeft alle logboekvermeldingen weer die verwijzen naar het object op het opgegeven adres. |
histroot |
Geeft informatie weer met betrekking tot zowel promoties als verplaatsingen van de opgegeven hoofdmap. |
histstats |
Geeft stresslogboekstatistieken weer. |
ip2md |
Geeft de MethodDesc structuur weer op het opgegeven adres in code die is gecompileerd met JIT. |
listnearobj |
Geeft het object dat voorafgaat aan en het opgegeven adres slaagt. |
logopen |
Hiermee schakelt u logboekregistratie van consolebestanden in. |
logclose |
Schakelt logboekregistratie van consolebestanden uit. |
logging |
Hiermee schakelt u interne SOS-logboekregistratie in of uit. |
lm of modules |
Geeft de systeemeigen modules in het proces weer. |
name2ee |
Geeft de MethodTable en EEClass structuren weer voor het opgegeven type of de opgegeven methode in de opgegeven module. |
objsize |
Geeft de grootte van het opgegeven object weer. |
parallelstacks |
Geeft de samengevoegde threadsstack op dezelfde manier weer als het deelvenster 'Parallelle stacks' van Visual Studio. |
pathto |
Geeft het GC-pad van <root> naar <target> . |
pe of printexception |
Hiermee worden velden weergegeven en opgemaakt van een object dat is afgeleid van de Exception klasse op het opgegeven adres. |
r of registers |
Geeft de registers van de thread weer. |
runtimes |
Geeft een lijst weer van de runtimes in het doel of wijzigt de standaardruntime. |
setclrpath |
Hiermee stelt u het pad in om coreclr dac/dbi-bestanden te laden met behulp van setclrpath <path> . |
setsymbolserver |
Hiermee schakelt u de ondersteuning van de symboolserver in. |
sos |
Voert verschillende coreclr-foutopsporingsopdrachten uit. Gebruik de syntaxis sos <command-name> <args> . Zie 'soshelp' voor meer informatie. |
soshelp of help |
Geeft alle beschikbare opdrachten weer. |
soshelp <command> of help <command> |
Geeft de opgegeven opdracht weer. |
syncblk |
Geeft de informatie van de SyncBlock-houder weer. |
taskstate |
Geeft een taakstatus weer in een door mensen leesbare indeling. |
threadpool |
Geeft informatie weer over de runtime-threadgroep. |
threadpoolqueue |
Hiermee worden werkitems in de wachtrij geplaatste threadpool weergegeven. |
threadstate |
Vrij drukt de betekenis van een threadsstatus af. |
threads <threadid> of setthread <threadid> |
Hiermee stelt u de huidige thread-id voor de SOS-opdrachten in of geeft u deze weer. |
timerinfo |
Geeft informatie weer over het uitvoeren van timers. |
token2ee |
Geeft de MethodTable-structuur en MethodDesc-structuur weer voor het opgegeven token en de opgegeven module. |
traverseheap |
Schrijft heapgegevens naar een bestand in een indeling die wordt begrepen door de CLR Profiler. |
verifyheap |
Controleert de GC heap op tekenen van corruptie. |
verifyobj |
Controleert het object dat wordt doorgegeven als argument voor tekenen van beschadiging. |
Notitie
Meer informatie vindt u in de SOS-foutopsporingsextensie voor .NET.
dotnet-dump ps
Een overzicht van de dotnet-processen waaruit dumps kunnen worden verzameld.
dotnet-dump
versie 6.0.320703 en latere versies geven ook de opdrachtregelargumenten weer waarmee elk proces is gestart, indien beschikbaar.
Samenvatting
dotnet-dump ps [-h|--help]
Opmerking
Stel dat u een langlopende app start met behulp van de opdracht dotnet run --configuration Release
. In een ander venster voert u de dotnet-dump ps
opdracht uit. De uitvoer die u ziet, is als volgt. De opdrachtregelargumenten, indien aanwezig, worden weergegeven in dotnet-dump
versie 6.0.320703 en hoger.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-dump
gebruiken
De eerste stap is het verzamelen van een dump. Deze stap kan worden overgeslagen als er al een kerndump is gegenereerd. Het besturingssysteem of de ingebouwde dumpgeneratiefunctie van de .NET Core-runtime kan elk kerndump maken.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Analyseer nu de kerndump met de analyze
opdracht:
$ 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.
>
Met deze actie wordt een interactieve sessie weergegeven die opdrachten accepteert zoals:
> 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]
Als u een onverwerkte uitzondering wilt zien die uw app heeft gedood:
> 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
Problemen met dumpverzameling oplossen
Dumpverzameling vereist dat het proces kan worden aangeroepen ptrace
. Als u problemen ondervindt met het verzamelen van dumps, is de omgeving waarop u werkt mogelijk geconfigureerd om dergelijke aanroepen te beperken. Zie onze dumps: veelgestelde vragen over het oplossen van tips en mogelijke oplossingen voor veelvoorkomende problemen.