Memóriakép-gyűjtési és elemzési segédprogram (dotnet-dump)
Ez a cikk a ✔️ dotnet-dump
3.0.47001-es és újabb verziókra vonatkozik
Feljegyzés
dotnet-dump
macOS esetén csak a .NET 5-ös és újabb verziói támogatottak.
Telepítés
Kétféleképpen tölthető le és telepíthető dotnet-dump
:
dotnet globális eszköz:
A NuGet-csomag legújabb kiadási verziójának
dotnet-dump
telepítéséhez használja a dotnet eszköz telepítési parancsát:dotnet tool install --global dotnet-dump
Közvetlen letöltés:
Töltse le a platformnak megfelelő végrehajtható eszközt:
OS Platform Windows x86 x64 | Arm-x64 | | Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Feljegyzés
dotnet-dump
X86-alkalmazásokhoz az eszköz megfelelő x86-os verziójára van szükség.
Szinopszis
dotnet-dump [-h|--help] [--version] <command>
Leírás
A dotnet-dump
globális eszköz lehetővé tette a memóriaképek gyűjtését és elemzését Windows, Linux és macOS rendszeren anélkül, hogy natív hibakeresőkre lenne szükség. Ez az eszköz olyan platformokon fontos, mint az Alpine Linux, ahol nem érhető el teljesen működő lldb
eszköz. Az dotnet-dump
eszköz lehetővé teszi, hogy SOS-parancsokat futtasson az összeomlások és a szemétgyűjtő (GC) elemzéséhez, de nem natív hibakereső, így a natív veremkeretek megjelenítése nem támogatott.
Beállítások
--version
Megjeleníti a dotnet-dump segédprogram verzióját.
-h|--help
Parancssori súgót jelenít meg.
Parancsok
Parancs |
---|
dotnet-dump collect |
dotnet-dump elemzés |
dotnet-dump ps |
dotnet-dump collect
Egy folyamatból származó memóriaképet rögzít.
Szinopszis
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Beállítások
-h|--help
Parancssori súgót jelenít meg.
-p|--process-id <PID>
Megadja azt a folyamatazonosítót, amelyből memóriaképet gyűjthet.
-n|--name <name>
Megadja annak a folyamatnak a nevét, amelyből memóriaképet szeretne gyűjteni.
--type <Full|Heap|Mini>
Megadja a memóriakép típusát, amely meghatározza a folyamatból összegyűjtött információk típusait. Három típus létezik:
Full
- A legnagyobb memóriakép, amely tartalmazza az összes memóriát, beleértve a modulképeket is.Heap
- Nagy és viszonylag átfogó memóriakép, amely modullistákat, szállistákat, minden vermet, kivételadatokat, információkat és minden memóriát tartalmaz, kivéve a leképezett képeket.Mini
- Egy kis memóriakép, amely tartalmazza a modullistákat, a szállistákat, a kivételadatokat és az összes vermet.
Ha nincs megadva,
Full
akkor az alapértelmezett érték.-o|--output <output_dump_path>
A teljes elérési út és fájlnév, ahol az összegyűjtött memóriaképet meg kell írni. Győződjön meg arról, hogy a dotnet-folyamatot futtató felhasználó írási engedélyekkel rendelkezik a megadott könyvtárhoz.
Ha nincs megadva:
- Alapértelmezés szerint .\ dump_YYYYMMDD_HHMMSS.dmp Windows rendszeren.
- A ./core_YYYYMMDD_HHMMSS alapértelmezett értéke Linux és macOS rendszeren.
Az YYYYMMDD év/hónap/nap, a HHMMSS pedig óra/perc/másodperc.
--diag
Engedélyezi a memóriaképek gyűjtésének diagnosztikai naplózását.
--crashreport
Engedélyezi az összeomlási jelentések létrehozását.
Feljegyzés
Linux és macOS rendszeren ez a parancs elvárja a célalkalmazást, és dotnet-dump
ugyanazt TMPDIR
a környezeti változót használja. Ellenkező esetben a parancs időtúllépést fog végrehajtani.
Feljegyzés
A memóriaképek gyűjtéséhez dotnet-dump
a célfolyamatot futtató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni. Ellenkező esetben az eszköz nem fog kapcsolatot létesíteni a célfolyamattal.
dotnet-dump elemzés
Elindít egy interaktív rendszerhéjat egy memóriakép feltárásához. A rendszerhéj különböző SOS-parancsokat fogad el.
Szinopszis
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argumentumok
<dump_path>
Megadja az elemezni kívánt memóriaképfájl elérési útját.
Beállítások
-c|--command <debug_command>
Futtatja a parancsot az indításkor. Ennek a paraméternek több példánya is használható a parancsok láncolására szolgáló meghívásban. A parancsok a parancssorban megadott sorrendben lesznek futtatva. Ha azt szeretné, hogy a dotnet-memóriakép a parancsok után lépjen ki, az utolsó parancsnak "exit" (kilépés) kell lennie.
SOS-parancsok elemzése
Parancs | Függvény |
---|---|
analyzeoom |
Megjeleníti az utolsó OOM adatait, amely a GC-halomba irányuló foglalási kérelemben történt. |
clrmodules |
Felsorolja a folyamat felügyelt moduljait. |
clrstack |
Csak felügyelt kód veremkövetését biztosítja. |
clrthreads |
Felsorolja a futó felügyelt szálakat. |
clru |
Egy felügyelt metódus jegyzetekkel ellátott szétszerelését jeleníti meg. |
d vagy readmemory |
Memóriatartalom memóriaképe. |
dbgout |
Engedélyezi/letiltja (-off ) a belső SOS-naplózást. |
dso |
Megjeleníti az aktuális verem határán belül található összes felügyelt objektumot. |
dumpalc |
Egy gyűjthető AssemblyLoadContext részleteit jeleníti meg, amelybe a megadott objektum betöltődik. |
dumparray |
Egy felügyelt tömb részleteit jeleníti meg. |
dumpasync |
Megjeleníti az aszinkron állapotú gépek adatait a szemétgyűjtési halomon. |
dumpassembly |
Egy szerelvény részleteit jeleníti meg. |
dumpclass |
A struktúra adatait EEClass jeleníti meg a megadott címen. |
dumpconcurrentdictionary |
Egyidejű szótártartalmat jelenít meg. |
dumpconcurrentqueue |
Egyidejű üzenetsor-tartalmat jelenít meg. |
dumpdelegate |
Egy meghatalmazott adatainak megjelenítése. |
dumpdomain |
Megjeleníti az összes AppDomain vagy a megadott szerelvények adatait. |
dumpgcdata |
Megjeleníti a csoportházirend-adatokkal kapcsolatos információkat. |
dumpgen |
A megadott generáció halomtartalmat jelenít meg. |
dumpheap |
Információkat jelenít meg a szemétgyűjtési halomról és az objektumok gyűjtési statisztikáiról. |
dumpil |
Megjeleníti a felügyelt metódushoz társított közös köztes nyelvet (CIL). |
dumplog |
Egy memóriabeli stressznapló tartalmát írja a megadott fájlba. |
dumpmd |
A struktúra adatait MethodDesc jeleníti meg a megadott címen. |
dumpmodule |
A modul adatainak megjelenítése a megadott címen. |
dumpmt |
A metódustáblával kapcsolatos információkat jeleníti meg a megadott címen. |
dumpobj |
Megjeleníti az objektum adatait a megadott címen. |
dumpruntimetypes |
Megkeresi az összes System.RuntimeType objektumot a GC-halomtárban, és kinyomtatja az általuk hivatkozott típusnevet és MethodTable-t is. |
dumpsig |
A megadott metódus vagy mező <sigaddr> <moduleaddr> aláírásának memóriaképe. |
dumpsigelem |
Egy aláírási objektum egyetlen elemének memóriaképe. |
dumpstackobjects |
Megjeleníti az aktuális verem határán belül található összes felügyelt objektumot. |
dumpvc |
Egy értékosztály mezőivel kapcsolatos információkat jelenít meg. |
eeheap |
Megjeleníti a belső futtatókörnyezeti adatstruktúrák által felhasznált folyamatmemória adatait. |
eestack |
A folyamat összes szálán fut dumpstack . |
eeversion |
A futtatókörnyezetre és az SOS-verziókra vonatkozó információkat jeleníti meg. |
ehinfo |
Megjeleníti a kivételkezelési blokkokat egy JIT-ed metódusban. |
exit vagy quit |
Kilép az interaktív módból. |
finalizequeue |
Megjeleníti a véglegesítéshez regisztrált összes objektumot. |
findappdomain |
GC-objektum AppDomainjének feloldása. |
gchandles |
Megjeleníti a folyamat szemétgyűjtő fogópontjaira vonatkozó statisztikákat. |
gcheapstat |
A szemétgyűjtő statisztikáit jeleníti meg. |
gcinfo |
Megjeleníti egy metódus JIT GC-kódolását. |
gcroot |
Információkat jelenít meg az objektumra mutató hivatkozásokról (vagy gyökerekről) a megadott címen. |
gcwhere |
Megjeleníti a megadott cím GC-halomjának helyét. |
histclear |
Felszabadítja a Hist parancscsalád által használt erőforrásokat. |
histinit |
Inicializálja az SOS-struktúrákat a hibakeresésben mentett stressznaplóból. |
histobj |
Megvizsgálja a stressznapló áthelyezési rekordjait, és megjeleníti azokat a szemétgyűjtési áthelyezések láncát, amelyek az argumentumként átadott címre vezethettek. |
histobjfind |
Megjeleníti az összes olyan naplóbejegyzést, amely az objektumra hivatkozik a megadott címen. |
histroot |
Megjeleníti a megadott gyökér előléptetésével és áthelyezésével kapcsolatos információkat. |
histstats |
A stressznapló statisztikáit jeleníti meg. |
ip2md |
MethodDesc A JIT által lefordított kódban a megadott címen jeleníti meg a struktúrát. |
listnearobj |
Megjeleníti a megadott címet megelőző és azt követő objektumot. |
logopen |
Engedélyezi a konzolfájl-naplózást. |
logclose |
Letiltja a konzolfájl-naplózást. |
logging |
Engedélyezi/letiltja a belső SOS-naplózást. |
lm vagy modules |
Megjeleníti a folyamat natív moduljait. |
name2ee |
Megjeleníti a MethodTable megadott típushoz vagy EEClass metódushoz tartozó struktúrákat a megadott modulban. |
objsize |
A megadott objektum méretét jeleníti meg. |
parallelstacks |
Az egyesített szálak veremét a Visual Studio "Párhuzamos veremek" paneléhez hasonlóan jeleníti meg. |
pathto |
Megjeleníti a GC elérési útját a következőhöz <root> <target> : . |
pe vagy printexception |
Megjeleníti és formázhatja a megadott címen található osztályból Exception származtatott objektumok mezőit. |
r vagy registers |
Megjeleníti a szálregisztrálásokat. |
runtimes |
Felsorolja a célban lévő futtatókörnyezeteket, vagy módosítja az alapértelmezett futtatókörnyezetet. |
setclrpath |
Beállítja a coreclr dac/dbi fájlok betöltésének elérési útját a használatával setclrpath <path> . |
setsymbolserver |
Engedélyezi a szimbólumkiszolgáló támogatását. |
sos |
Különböző coreclr hibakeresési parancsokat hajt végre. Használja a szintaxist sos <command-name> <args> . További információ: "soshelp". |
soshelp vagy help |
Megjeleníti az összes elérhető parancsot. |
soshelp <command> vagy help <command> |
Megjeleníti a megadott parancsot. |
syncblk |
Megjeleníti a SyncBlock tulajdonosának adatait. |
taskstate |
Feladatállapot megjelenítése olvasható formátumban. |
threadpool |
Megjeleníti a futtatókörnyezeti szálkészlet adatait. |
threadpoolqueue |
Üzenetsorba helyezett szálkészlet munkaelemeit jeleníti meg. |
threadstate |
Szép nyomtatja a jelentést a szálak állapotát. |
threads <threadid> vagy setthread <threadid> |
Beállítja vagy megjeleníti az SOS-parancsok aktuális szálazonosítóját. |
timerinfo |
A futó időzítőkkel kapcsolatos információkat jeleníti meg. |
token2ee |
Megjeleníti a methodTable struktúrát és a MethodDesc struktúrát a megadott jogkivonathoz és modulhoz. |
traverseheap |
Halomadatokat ír ki egy fájlba a CLR Profiler által ismert formátumban. |
verifyheap |
Ellenőrzi a GC halomját, hogy vannak-e sérülés jelei. |
verifyobj |
Ellenőrzi a sérülés jeleinek argumentumaként átadott objektumot. |
Feljegyzés
További részletek a .NET-hez készült SOS hibakeresési bővítményben találhatók.
dotnet-dump ps
Felsorolja azokat a dotnet-folyamatokat, amelyekből a memóriaképek gyűjthetők.
dotnet-dump
A 6.0.320703-as és újabb verziók is megjelenítik azokat a parancssori argumentumokat, amelyekkel az egyes folyamatok elindultak, ha elérhetők.
Szinopszis
dotnet-dump ps [-h|--help]
Példa
Tegyük fel, hogy a paranccsal dotnet run --configuration Release
elindít egy hosszú ideig futó alkalmazást. Egy másik ablakban futtassa a dotnet-dump ps
parancsot. A megjelenő kimenet a következő. Ha vannak ilyenek, a parancssori argumentumok a 6.0.320703-as és újabb verzióban dotnet-dump
jelennek meg.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Az dotnet-dump
használata
Az első lépés egy memóriakép összegyűjtése. Ez a lépés kihagyható, ha már létrejött egy központi memóriakép. Az operációs rendszer vagy a .NET Core-futtatókörnyezet beépített memóriakép-létrehozási funkciója minden egyes mag-memóriaképet létrehozhat.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Most elemezze az alapvető memóriaképet a analyze
következő paranccsal:
$ 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.
>
Ez a művelet egy interaktív munkamenetet hoz létre, amely a következő parancsokat fogadja el:
> 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]
Ha nem kezelt kivételt szeretne látni, amely megölte az alkalmazást:
> 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
Memóriakép-gyűjteményekkel kapcsolatos problémák elhárítása
A memóriaképek gyűjtéséhez a folyamatnak képesnek kell lennie a hívásra ptrace
. Ha problémákat tapasztal a memóriaképek gyűjtésével kapcsolatban, előfordulhat, hogy a futtatott környezet úgy van konfigurálva, hogy korlátozza az ilyen hívásokat. Tekintse meg a Memóriaképek: gyakori kérdések hibaelhárítási tippeket és a gyakori problémák lehetséges megoldásait.