Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ dotnet-dump
verze 3.0.47001 a novější verze
Poznámka:
dotnet-dump
pro macOS se podporuje jenom v .NET 5 a novějších verzích.
Instalace
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-dump
:
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější verzi
dotnet-dump
balíčku NuGet, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-dump
Přímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Arm | arm-x64 Operační systém Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Poznámka:
Pokud chcete použít dotnet-dump
v aplikaci x86, potřebujete odpovídající verzi nástroje x86.
Synopse
dotnet-dump [-h|--help] [--version] <command>
Popis
Globální dotnet-dump
nástroj představuje způsob, jak shromažďovat a analyzovat výpisy paměti ve Windows, Linuxu a macOS bez jakéhokoli nativního ladicího programu. Tento nástroj je důležitý na platformách, jako je Alpine Linux, kde není k dispozici plně funkční lldb
. Nástroj dotnet-dump
umožňuje spouštět příkazy SOS pro analýzu chybových ukončení a uvolňování paměti (GC), ale nejedná se o nativní ladicí program, takže se nepodporují věci, jako je zobrazení nativních rámců zásobníku.
Možnosti
--version
Zobrazí verzi nástroje dotnet-dump.
-h|--help
Zobrazuje nápovědu k příkazovému řádku.
Příkazy
Příkaz |
---|
dotnet-dump collect |
dotnet-dump analýza |
dotnet-dump ps |
dotnet-dump collect
Zachytí výpis z procesu.
Synopse
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Možnosti
-h|--help
Zobrazuje nápovědu k příkazovému řádku.
-p|--process-id <PID>
Určuje číslo ID procesu, ze které se má shromáždit výpis paměti.
-n|--name <name>
Určuje název procesu, ze které se má shromáždit výpis paměti.
--type <Full|Heap|Mini>
Určuje typ výpisu paměti, který určuje typy informací shromážděných z procesu. Existují tři typy:
-
Full
- Největší výpis paměti obsahující veškerou paměť včetně imagí modulů. -
Heap
- Velký a relativně komplexní výpis obsahující seznamy modulů, seznamy vláken, všechny zásobníky, informace o výjimce, zpracování informací a veškerou paměť s výjimkou mapovaných obrázků. -
Mini
– Malý výpis paměti obsahující seznamy modulů, seznamy vláken, informace o výjimce a všechny zásobníky.
Pokud není zadáno,
Full
je výchozí hodnota.-
-o|--output <output_dump_path>
Úplná cesta a název souboru, do kterého se má zapsat shromážděný výpis. Ujistěte se, že uživatel, pod kterým je spuštěný proces dotnet, má oprávnění k zápisu do zadaného adresáře.
Pokud není zadáno:
- Výchozí hodnota je .\dump_YYYYMMDD_HHMMSS.dmp ve Windows.
- Výchozí hodnota je ./core_YYYYMMDD_HHMMSS v Linuxu a macOS.
YYYYMMDD is Year/Month/Day a HHMMSS is Hour/Minute/Second.
--diag
Povolí protokolování diagnostiky shromažďování výpisů paměti.
--crashreport
Povolí generování zpráv o chybách.
Poznámka:
V Linuxu a macOS tento příkaz očekává cílovou aplikaci a dotnet-dump
bude sdílet stejnou proměnnou TMPDIR
prostředí. Jinak vyprší časový limit příkazu.
Poznámka:
Pokud chcete shromáždit výpis paměti pomocí dotnet-dump
, musí být spuštěný jako stejný uživatel jako uživatel, který spouští cílový proces nebo jako kořen. Jinak se nástroj nepodaří navázat spojení s cílovým procesem.
Poznámka:
Shromažďování plného výpisu paměti nebo výpisu haldy může způsobit, že operační systém bude mít pro cílový proces značnou virtuální paměť. Pokud cílový proces běží v kontejneru s vynuceným limitem paměti, může zvýšené využití paměti způsobit ukončení kontejneru v případě překročení limitu operačního systému. Doporučujeme otestovat, abyste zajistili, že je limit paměti dostatečně vysoký. Další možností je dočasné změny nebo odebrání limitu před shromažďováním výpisů paměti, pokud to vaše prostředí podporuje.
dotnet-dump analýza
Spustí interaktivní prostředí pro prozkoumání výpisu paměti. Prostředí přijímá různé příkazy SOS.
Synopse
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argumenty
<dump_path>
Určuje cestu k souboru s výpisem paměti, který se má analyzovat.
Možnosti
-c|--command <debug_command>
Spustí příkaz při spuštění. Více instancí tohoto parametru lze použít při vyvolání ke zřetězování příkazů. Příkazy se spustí v pořadí, v jakém jsou zadané na příkazovém řádku. Pokud chcete po příkazech ukončit výpis paměti dotnet, měl by být poslední příkaz "exit".
Analýza příkazů SOS
Příkaz | Funkce |
---|---|
analyzeoom |
Zobrazí informace o posledním objektu OOM, ke kterému došlo v žádosti o přidělení haldy GC. |
clrmodules |
Zobrazí seznam spravovaných modulů v procesu. |
clrstack |
Poskytne trasování zásobníku pouze pro spravovaný kód. |
clrthreads |
Zobrazí seznam spravovaných vláken, která jsou spuštěná. |
clru |
Zobrazí anotovaný překlad spravované metody. |
d nebo readmemory |
Vypíše obsah paměti. |
dbgout |
Povolí nebo zakáže (-off ) interní protokolování SOS. |
dso |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpalc |
Zobrazí podrobnosti o collectible AssemblyLoadContext, do kterého je zadaný objekt načten. |
dumparray |
Zobrazí podrobnosti o spravovaném poli. |
dumpasync |
Zobrazí informace o asynchronních stavových počítačích na haldě s uvolňováním paměti. |
dumpassembly |
Zobrazí podrobnosti o sestavení. |
dumpclass |
Zobrazí informace o struktuře EEClass na zadané adrese. |
dumpconcurrentdictionary |
Zobrazí souběžný obsah slovníku. |
dumpconcurrentqueue |
Zobrazí souběžný obsah fronty. |
dumpdelegate |
Zobrazí informace o delegátu. |
dumpdomain |
Zobrazí informace o všech sestaveních ve všech doménách AppDomains nebo zadaném sestavení. |
dumpgcdata |
Zobrazí informace o datech GC. |
dumpgen |
Zobrazí obsah haldy pro zadanou generaci. |
dumpheap |
Zobrazí informace o statistikách haldy a shromažďování paměti o objektech. |
dumpil |
Zobrazí běžný zprostředkující jazyk (CIL), který je přidružený ke spravované metodě. |
dumplog |
Zapíše obsah zátěžového protokolu uloženého v paměti do zadaného souboru. |
dumpmd |
Zobrazí informace o struktuře MethodDesc na zadané adrese. |
dumpmodule |
Zobrazí informace o modulu na zadané adrese. |
dumpmt |
Zobrazí informace o tabulce metod na zadané adrese. |
dumpobj |
Zobrazí informace o objektu na zadané adrese. |
dumpruntimetypes |
Vyhledá všechny objekty System.RuntimeType v haldě GC a vytiskne také název typu a MethodTable, které odkazují. |
dumpsig |
Vypisuje podpis metody nebo pole určeného parametrem <sigaddr> <moduleaddr> . |
dumpsigelem |
Vypisuje jeden prvek objektu podpisu. |
dumpstackobjects |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpvc |
Zobrazí informace o polích třídy hodnot. |
eeheap |
Zobrazí informace o paměti procesu spotřebované interními datovými strukturami modulu runtime. |
eestack |
Spouští dumpstack se na všech vláknech v procesu. |
eeversion |
Zobrazí informace o modulech runtime a verzích SOS. |
ehinfo |
Zobrazí bloky zpracování výjimek v metodě jit-ed. |
exit nebo quit |
Ukončí interaktivní režim. |
finalizequeue |
Zobrazí všechny objekty, které jsou registrovány pro dokončení. |
findappdomain |
Pokusí se přeložit AppDomain objektu GC. |
gchandles |
Zobrazí statistické údaje o popisovačích systému uvolňování paměti v procesu. |
gcheapstat |
Zobrazí statistiku o uvolňování paměti. |
gcinfo |
Zobrazí kódování GC JIT pro metodu. |
gcroot |
Zobrazí informace o odkazech (nebo kořenech) objektu na zadané adrese. |
gcwhere |
Zobrazí umístění v haldě GC zadané adresy. |
histclear |
Uvolní všechny prostředky používané rodinou příkazů Hist. |
histinit |
Inicializuje struktury SOS ze zátěžového protokolu uloženého v laděné položce. |
histobj |
Zkontroluje všechny záznamy přemístění zátěžového protokolu a zobrazí řetězec přemísťování uvolňování paměti, který může vést na adresu předanou jako argument. |
histobjfind |
Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese. |
histroot |
Zobrazí informace týkající se propagace a přemístění zadaného kořenu. |
histstats |
Zobrazí statistiky protokolu napětí. |
ip2md |
MethodDesc Zobrazí strukturu na zadané adrese v kódu, který byl zkompilován JIT. |
listnearobj |
Zobrazí objekt, který předchází zadané adrese a bude úspěšný. |
logopen |
Povolí protokolování souborů konzoly. |
logclose |
Zakáže protokolování souborů konzoly. |
logging |
Povolí nebo zakáže interní protokolování SOS. |
lm nebo modules |
Zobrazí nativní moduly v procesu. |
name2ee |
MethodTable Zobrazí a EEClass struktury pro zadaný typ nebo metodu v zadaném modulu. |
objsize |
Zobrazí velikost zadaného objektu. |
parallelstacks |
Zobrazí zásobník sloučených vláken podobně jako na panelu Paralelní zásobníky sady Visual Studio. |
pathto |
Zobrazí cestu GC od <root> do <target> . |
pe nebo printexception |
Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese. |
r nebo registers |
Zobrazí registry vlákna. |
runtimes |
Zobrazí seznam modulů runtime v cíli nebo změní výchozí modul runtime. |
setclrpath |
Nastaví cestu pro načtení souborů dac/dbi coreclr pomocí setclrpath <path> . |
setsymbolserver |
Povolí podporu serveru symbolů. |
sos |
Spustí různé příkazy ladění coreclr. Použijte syntaxi sos <command-name> <args> . Další informace najdete v tématu "soshelp". |
soshelp nebo help |
Zobrazí všechny dostupné příkazy. |
soshelp <command> nebo help <command> |
Zobrazí zadaný příkaz. |
syncblk |
Zobrazí informace o držiteli syncblocku. |
taskstate |
Zobrazí stav úkolu v čitelném formátu člověka. |
threadpool |
Zobrazí informace o fondu vláken modulu runtime. |
threadpoolqueue |
Zobrazí pracovní položky fondu vláken ve frontě. |
threadstate |
Docela vytiskne význam stavu vláken. |
threads <threadid> nebo setthread <threadid> |
Nastaví nebo zobrazí aktuální ID vlákna pro příkazy SOS. |
timerinfo |
Zobrazí informace o spuštěných časovačích. |
token2ee |
Zobrazí strukturu MethodTable a strukturu MethodDesc pro zadaný token a modul. |
traverseheap |
Zapíše informace haldy do souboru ve formátu, kterému rozumí profiler CLR. |
verifyheap |
Zkontroluje známky poškození haldy GC. |
verifyobj |
Zkontroluje, zda objekt, který je předán jako argument, jeví známky poškození. |
Poznámka:
Další podrobnosti najdete v rozšíření ladění SOS pro .NET.
dotnet-dump ps
Uvádí seznam procesů dotnet, ze které lze shromažďovat výpisy paměti.
dotnet-dump
Verze 6.0.320703 a novější verze také zobrazují argumenty příkazového řádku, se kterými byly jednotlivé procesy spuštěny, pokud jsou k dispozici.
Synopse
dotnet-dump ps [-h|--help]
Příklad
Předpokládejme, že spustíte dlouhotrvající aplikaci pomocí příkazu dotnet run --configuration Release
. V jiném okně spustíte dotnet-dump ps
příkaz. Výstup, který uvidíte, je následující. Argumenty příkazového řádku( pokud existují) se zobrazují ve dotnet-dump
verzi 6.0.320703 a novější.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Používání akce dotnet-dump
Prvním krokem je shromáždění výpisu paměti. Tento krok lze přeskočit, pokud už byl vygenerován výpis paměti jádra. Každý z nich může vytvářet výpisy paměti operačního systému nebo integrované funkce generování výpisu paměti modulu runtime .NET Core.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Teď pomocí příkazu analyzujte výpis analyze
paměti jádra:
$ 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.
>
Tato akce zobrazí interaktivní relaci, která přijímá příkazy jako:
> 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]
Zobrazení neošetřené výjimky, která zabila vaši aplikaci:
> 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
Řešení potíží s shromažďováním výpisů paměti
Shromažďování výpisů paměti vyžaduje, aby proces mohl volat ptrace
. Pokud máte problémy se shromažďováním výpisů paměti, může být prostředí, na kterém běžíte, nakonfigurované tak, aby tato volání omezovala. Projděte si naše výpisy paměti: Nejčastější dotazy k řešení potíží a potenciální řešení běžných problémů.