Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT...

20
Robert Haken MVP ASP.NET/IIS, MCT @RobertHaken, [email protected] http://knowledge-base.havit.cz Advanced Debugging Techniky .NET Framework

Transcript of Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT...

Page 1: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Robert HakenMVP ASP.NET/IIS, MCT

@RobertHaken, [email protected]

http://knowledge-base.havit.cz

Advanced Debugging Techniky

.NET Framework

Page 2: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Debugging Tools for Windows WinDbg – „GUI“

NTSD – new console

CSD – classic console

portable

low-level

extensions

Page 3: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

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 – 3rd party

!help [<command>]

Page 4: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Záludnosti použití DebuggeruPlatform - 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 5: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Režimy práce s DebuggeremOpen Executable... (g pro Run)

Attach to a Process...

Open Crash Dump...– Task Manager / Create Dump File

– WIN32 API (extern .NET)

– DebugDiag / ADPLUS

– Windows Error Reporting

...

Page 6: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DEMO

Page 7: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

.NET Internals - AppDomainsSystem

– zakládá Shared a Application

– loads 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 8: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

.NET Internals - AssembliesAssembly = unit of deployment

– manifest– jeden nebo několik Modules– self-describing

JIT Compilation, MSIL, Method Tables, Method Descr.!DumpAssembly <AssAddr>!DumpModule [-mt] <ModuleAddr>!DumpMT <MTaddr>!IP2MD <IPaddr> !DumpMD <MDaddr>

Page 9: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DEMO

Page 10: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Stack Examination

!ClrStack [-a] [-l] [-p]

!DumpStack [-EE]

!EEStack [-EE] (all threads)

!DumpStackObjects

Page 11: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Threads

!Threads !ThreadState <state>

~123s

!ThreadPool

Page 12: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DEMO

Page 13: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Heap Examination!DumpHeap [-stat] [-type <name>]

[-mt <MTaddr>] [-live|dead]!HeapStat [-inclUnrooted]!GCRoot <ObjAddr> !GCHandles!GCWhere <ObjAddr>!EEHeap –gc!FinalizationQueue!FindAppDomain <ObjAddr>

Page 14: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DEMO

Page 15: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Object Inspection

!DumpObject <ObjAddr>

!DumpArray <ObjAddr>

!DumpVC <MTaddr> <ObjAddr>

dd <addr>

dq <addr>

!ObjSize <ObjAddr>

Page 16: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DEMO

Page 17: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Error Diagnostics

!VerifyHeap

!VerifyObj <ObjAddr>

!PrintException <ObjAddr>

...viz další techniky + DebugDiag

Page 18: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

DebugDiag

„user“-friendly UI

připravené analýzy

sběr dat/dumpů

pod pokličkou debugger services

Page 19: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Scénáře použití

memory leak + OutOfMemoryException

– !DumpHeap, !GCRoot

tichý crash

– StackOverflowException

– unhandled exception mimo ASP.NET thread

– !ClrStack

Page 20: Advanced Debugging Techniky .NET Framework · PDF fileRobert Haken MVP ASP.NET/IIS, MCT @RobertHaken, haken@havit.cz   Advanced Debugging Techniky.NET Framework

Robert HakenMVP ASP.NET/IIS, MCT

@RobertHaken, [email protected]

http://knowledge-base.havit.cz

Q & A