advanced debugging with windbg and sos

18
Sasha Goldshtein CTO Sela Group @goldshtn blog.sashag.net Advanced Debugging with WinDbg and SOS

Upload: sasha-goldshtein

Post on 20-May-2015

4.373 views

Category:

Technology


1 download

DESCRIPTION

In this talk, we look at WinDbg, a powerful debugger that can help resolve difficult errors in production environments. We use WinDbg to pinpoint stack traces given dump files generated in production, to find memory leak causes and inspect heap memory, and even to automatically walk objects and threads to find deadlocks.

TRANSCRIPT

Page 1: Advanced Debugging with WinDbg and SOS

Sasha Goldshtein

CTOSela Group

@goldshtnblog.sashag.net

Advanced Debugging with

WinDbg and SOS

Page 2: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

AN HOUR FROM NOW,YOU’LL KNOW HOW TO:

Capture crash and hang dumps Pinpoint basic crash causes from

dumps Inspect heap objects and graphs to find

memory leaks Identify deadlocked threads

Page 3: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

DUMPS 101

Page 4: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

A DUMP IS A SNAPSHOT OF A RUNNING PROCESS. YOU CAN

SAVE IT, MOVE IT AROUND, AND ANALYZE IT LATER. YOU CAN’T

“DEBUG” IT.

Page 5: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

TWO TYPES OF DUMPS:

Crash Dump The program crashed

Hang Dump The program didn’t crash

Yet

Page 6: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

SYSINTERNALS PROCDUMP: TAKE DUMPS EASILY, ANYWHERE, AND

WITH NO PUN INTENDED.

Procdump -ma -e MyApp.exeProcdump -h -x C:\temp\myapp.exeProcdump -c 90 -n 3 -s 5 MyApp.exeProcdump -e 1 1234

Page 7: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

CRASH ROOT CAUSE FROM A DUMP

Page 8: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

DRAG AND DROP A DUMP FILE INTO VISUAL STUDIO. CLICK THE

GREEN BUTTON. VOILA, IT WORKS.*

* NITPICKER’S CORNER: YOU NEED SYMBOLS AND SOURCES TO BE LINED UP PROPERLY.

Page 9: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

YOU WILL INSTALL VISUAL STUDIO ON MY BOXEN OVER MY DEAD BODY. GOOD DAY.

I SAID “GOOD DAY”.

Joe the IT Admin

Page 10: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

10

ENTER:

WinDbg Lightweight GUI debugger

Super-scriptable

Super-extensible

Knows nothing about .NET

SOS WinDbg extension for .NET

Ships with .NET Framework

Or on the symbol server*

Knows all about .NET

* As of CLR 4.0, for GDR versions

Page 11: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

TAKE 2:

Drag and drop a dump file into WinDbg. Hmm. Now what?

!analyze -v !PrintException!CLRStack .load sosex!mk !mdt

.for (r $t0=@ebp; poi(@$t0)!=0; r $t0=poi(@$t0)) { !mln poi(@$t0+4) }

Page 12: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

MEMORY LEAKS: THE EASY WAY

Not in this talk. Shell out $500 for a decent memory profiler.

Page 13: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

MEMORY LEAKS: THE HARD WAY

Page 14: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

WHAT WE NEED:

1. A list of all heap objects

2. A diff of heap objects between dumps

3. Why these heap objects won’t go away

!dumpheap -stat !objsize!gcroot !refs

Page 15: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

DEADLOCKS

Page 16: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

WHAT WE NEED:

1. What is thread X waiting for

2. (Suppose it’s sync object Y)

3. Which thread owns sync object Y

!syncblk !mwaits!mlocks !dlk

Page 17: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

ADDITIONAL REFERENCES

Page 18: Advanced Debugging with WinDbg and SOS

www.devconnections.com

ADVANCED DEBUGGING WITH WINDBG AND SOS

18

THANK YOU!

Sasha Goldshtein@goldshtn

[email protected]