Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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-dumptelepítéséhez használja a dotnet eszköz telepítési parancsát:dotnet tool install --global dotnet-dumpKözvetlen letöltés:
Töltse le a platformnak megfelelő végrehajtható eszközt:
Operációs rendszer Plattform Windows 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
--versionMegjeleníti a dotnet-dump segédprogram verzióját.
-h|--helpParancssori súgót jelenít meg.
Parancsok
| Parancs |
|---|
| dotnet-dump gyűjtés |
| dotnet-dump elemzés |
| dotnet-dump ps |
dotnet-dump gyűjtés
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|--helpParancssori 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. -
Triage- Egy kis memóriakép, amely tartalmazza a modullistákat, a szállistákat, a kivételadatokat, az összes vermet és a PII-t.
Ha nincs megadva,
Fullakkor 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.
--diagEngedélyezi a memóriaképek gyűjtésének diagnosztikai naplózását.
--crashreportEngedé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-dumpa 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.
Feljegyzés
A teljes vagy halommemória összegyűjtése miatt az operációs rendszer jelentős virtuális memóriában lapozhat a célfolyamat számára. Ha a célfolyamat kényszerített memóriakorláttal rendelkező tárolóban fut, a megnövekedett memóriahasználat miatt az operációs rendszer leállíthatja a tárolót, ha túllépte a korlátot. Javasoljuk a tesztelést, hogy a memóriakorlát elég magas legyen. Egy másik lehetőség, hogy ideiglenesen módosítsa vagy távolítsa el a korlátot a memóriakép-gyűjtemény előtt, ha a környezet támogatja ezt.
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 Releaseelindí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.