.NET Memory Internals
Transcript of .NET Memory Internals
![Page 2: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/2.jpg)
Windows Debugger + .NET extensions
DebugDiag
dema
Agenda
![Page 3: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/3.jpg)
DEMOStackOverflowException – DebugDiag, WinDbg
![Page 4: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/4.jpg)
Debugging Tools for Windows
WinDbg – „GUI“
NTSD – new console
CSD – classic console
DebugDiag -
samostatné
součást Windows SDK
www.windbg.org
![Page 5: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/5.jpg)
Debugger Extensions pro .NET
.load C:\path\to\extension.dll
SOS.dll – Son of Strike, součást .NET
.loadby sos mscorwks (.NET < 4)
.loadby sos clr (.NET >= 4)
PSSCOR2/PSSCOR4 – širší SOS (web)
SOSEX, NetEx – 3rd party
!help [<command>]
![Page 6: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/6.jpg)
Záludnosti použití Debuggeru
Platform - x86 vs. x64 vs. ...
Symbols
.symfix (MSFT Symbols Server)
.sympath, .sympath+
.reload
.NET Data Access Layer (mscordacwks.dll)
.cordll -ve -u –l
stejná verze, jako na laděném stroji (dtto SOS)
![Page 7: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/7.jpg)
Režimy práce s Debuggerem
Open Executable... (g pro Run)
Attach to a Process...
Open Crash Dump...
Task Manager / Create Dump File (!!32-bit vs. x64 stroj)
DebugDiag / ADPLUS
Windows Error Reporting
WIN32 API (extern v .NET)
Windows Crash Dump (native)
![Page 8: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/8.jpg)
DebugDiag
„user“-friendly UI
připravené analýzy
sběr dat/dumpů
pod pokličkou debugger services
voláno např. i z Azure Web Apps KUDU
![Page 9: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/9.jpg)
DEMODebugDiag demo report
![Page 10: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/10.jpg)
Stack Examination
!ClrStack [-i] [-a] [-l] [-p]
!DumpStack [-EE]
!EEStack [-EE] (all threads)
!DumpStackObjects (typy)
![Page 11: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/11.jpg)
DEMO01-StackHeap, x64
![Page 12: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/12.jpg)
Heap Examination
!DumpHeap [-stat] [-type <name>][-mt <MTaddr>] [-live|dead]
!HeapStat [-inclUnrooted]
!GCRoot <ObjAddr> !GCHandles
!EEHeap –gc
!FinalizationQueue [-allReady]
!FindAppDomain <ObjAddr>
![Page 13: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/13.jpg)
Object Inspection
!DumpObject <ObjAddr>
!DumpArray <ObjAddr>
!DumpVC <MTaddr> <ObjAddr>
dd <addr>
dq <addr>
!ObjSize <ObjAddr>
![Page 14: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/14.jpg)
Error Diagnostics
!PrintException [ObjAddr] [-nested]
!DumpAllExceptions (PSSCOR4)
!wdae (NETEXT)
!wpe (NETEXT)
!VerifyHeap
!VerifyObj <ObjAddr>
!analyze -v (native)
![Page 15: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/15.jpg)
Threads
!Threads !ThreadState <state>
~123s
!ThreadPool
![Page 16: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/16.jpg)
.NET Internals - AppDomains
System
zakládá Shared a Application
loaduje mscorlib.dll (into Shared)
spravuje AppDomains, spravuje strings
předvytvoří instance výjimek OoM, SO, ...
Shared
obsahuje mscorlib.dll + basic types - string, enum, ..
Application (n)
user code
!DumpDomain [<addr>]
![Page 17: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/17.jpg)
.NET Internals - Assemblies
Assembly = unit of deployment
manifest
jeden nebo několik Modules
self-describing
!DumpAssembly <AssAddr>
!DumpModule [-mt] <ModuleAddr>
!DumpMT <MTaddr>
!IP2MD <IPaddr> !DumpMD <MDaddr>
![Page 18: .NET Memory Internals](https://reader034.fdocuments.in/reader034/viewer/2022042619/58a1ab191a28ab64388bc819/html5/thumbnails/18.jpg)
www.showit.sk
www.gopas.sk