HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

Vývojářské nástroje

Visual Studio, WDE, utility, tools

WinDbg a SOS.dll - analýza obsahu .NET heapu z memory dumpu

Nemám teď prostor se široce rozepisovat, takže spíš jenom rychlé poznámky z mého postupu analýzy obsahu .NET heapu z memory dumpu.

Memory dump vytvoříme např. z Task Manageru, pravým tlačítkem na proces a "Create Dump File". Získaný soubor .dmp si přeneseme na vývojářskou mašinu, kde máme nainstalováno WinDbg (a .NET Framework, jehož součástí je SOS.dll extenze pro WinDbg).

Po otevření dumpu ve WinDbg (File / Open Crash Dump...) používáme následující příkazy:

Zavedení SOS.dll extenzí:

.loadby sos.dll mscorwks

Základní statistika heapu, zejména výpis jednotlivých datových typů a objem paměti, kterou zabírají.

!dumpheap -stat

Pokud dostáváte chybu ve stylu "Unable to load DLL mscordacwks", tak se hodí níže uvedený příkaz, který zapne podrobné hlášky o načítání DLL, kde se hledají a jaké, dostanete tak informaci, jakou verzi je potřeba sehnat. Cestu pak lze nastavit přes File/Symbols Path...

.cordll -ve -u -l

Výpis objektů z dané MethodTable (objekty daného typu), adresu získáme ze sloupce MT z předchozího příkazu (první sloupec):

!dumpheap -mt <MethodTableAddress>

Dump objektu (výpis jeho hodnot, atp.), adresu získáme z předchozího příkazu (první sloupec):

!do <ObjectAddress>

Vypsání všech referencí na objekt (od rootových), tj. proč nám objekt visí v paměti na není čištěn GC:

!gcroot <ObjectAddress>

Velikost objektu včetně všech jeho podstromu (toho, co referencuje):

!objsize <ObjectAddress>

Help pro určitý příkaz SOS.dll

!help <příkaz>

 

Odkazy, které se mohou hodit:

http://blogs.msdn.com/b/cclayton/archive/2010/06/22/basic-analysis-of-a-managed-memory-dump-net.aspx

http://www.codeproject.com/KB/dotnet/Memory_Leak_Detection.aspx

http://blogs.msdn.com/b/tess/

http://msdn.microsoft.com/en-us/library/bb190764.aspx

 

PSSCOR2.dll - nástupce SOS.dll

Z webu Microsoftu si můžete stáhnout též PSSCOR2.dll, nástupce knihovny SOS.dll. Původní možnosti SOS.dll jsou podstatně rozšířeny.

Po stažení jsou k dispozici různé verze, je potřeba zavést tu verzi, podle toho jaký dump budete analyzovat:

.load D:\Temp\amd64\psscor2.dll

 

Published 9. července 2010 13:40 by Robert Haken
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

What do you think?

(required) 
(optional)
(required) 
Enter the code you see below

Submit