Production Debugging Ingo Rammer ingo.rammer@thinktecture.com.

Post on 05-Apr-2015

120 views 1 download

Transcript of Production Debugging Ingo Rammer ingo.rammer@thinktecture.com.

Production Debugging

Ingo Rammeringo.rammer@thinktecture.com

Ingo Rammer und

• Kleine Beratungsfirma für Softwareentwickler

• Unterstützung, Coaching und Beratung für Software-Architekten und -Entwickler– Architektur- und Code-Reviews– Prototypentwicklung und Architekturberatung– Coaching und Mentoring– Anwendungsoptimierung und Troubleshooting

• http://www.thinktecture.com• ingo.rammer@thinktecture.com

… oder „Wenn nix mehr geht, geht doch noch was“

Ziel dieser 75 Minuten

• Tools• Techniken• Links

• Gewissheit: Sie können das Problem lösen!

Szenarien

• Applikationsfehler, die nicht ausreichend geloggt werden

• „Verschluckte“ Exceptions, die im Produktivbetrieb essentielle Infos vernichten

• Anwendungen, die sich „einfach so beenden“

• Memory Leaks in grafischen Applikationen und in Server-Anwendungen

• … und kein Visual Studio weit und breit

Gemeinsamkeiten der Tools

• XCOPY – am Server muss nichts installiert werden• Kostenlos• Debugger kommen von Microsoft, Rest ist optional

MDbg

• Managed Code Debugger• Nachfolger von cordbg (Common Object

Runtime Debugger)• Zwei unterschiedliche Versionen!

– MDBG im SDK • Supported

– „MDBG Sample“ als C# Quellcode• IL Disassembler• Grafische Oberfläche• Unsupported

MDbg Kommandos

• ru -> Run (Starte Anwendung)• at -> Attach (Laufenden Prozess

debuggen)• g -> Go (Äquivalent von F5 in Visual

Studio)• lo -> Load Module (z.B. “LO ILDASM”)

• ca ex -> Catch Exceptions• w -> Wo bin ich? (Stack Trace)• t -> Thread-Liste• t <#> -> Thread auswählen (z.B. “t 3”)• p -> Print (Lokale Variable)

MDbg bei verschluckten Exceptions

• Drag und Drop der EXE auf MDbg– Alternativ: Start von Mdbg, dann Verwendung von Run

oder Attach• ca ex (Catch Exceptions)• g (Go)• Sobald die Exception auftritt:

– w (Stack Trace)– g (Bei Bedarf: Go)

WinDbg

• Low Level Debugger (auch Kernel Debugging)

• Kennt .NET nicht, sondern grundsätzlich nur unmanaged code

• Erweiterungsmodul SOS (Son Of Strike) erlaubt Zugriff auf interne .NET Datenstrukturen

• Relativ komplex, bietet aber wichtige Features:– Memory Leak Analyse („alle existierenden

Objekte“)– Analyse von Memory Dumps– Remote Debugging über TCP/IP (auch mit TCP

Forwardern als Relay-Stationen)

WinDbg Grundlagen

• .loadby sos mscorlib -> lade SOS aus dem Verzeichnis, aus dem mscorlib

geladen wurde. Funktioniert erst, nachdem CLR im

Zielprozess initialisiert wurde!• G -> go (F5)• CTRL+BREAK -> Break• ~ -> Thread List• ~#s -> Thread Auswahl (z.B. ~4s)• !clrstack -> Stack Trace• !help [cmd] -> Liste der SOS Funktionen• .hh [cmd] -> Hilfe zu WinDbg Funktionen

WinDbg und Exceptions

• WinDbg geht standardmässig bei einigen unmanaged Exceptions (Access Violations) in den Break-Modus

• SXE <event> -> Break• SXI <event> -> Ignorieren• SXN <event> -> Output

• SXE clr -> Break bei allen CLR Exceptions

• Wichtig: NullReferenceException, DivideByZero sind keine CLR Exceptions, sondern „normale“ unmanaged Exceptions

• SXE av -> Break bei Access Violation (Null Ref, default)• SXE dz -> Break bei Division durch Null (default)

WinDbg und Speicherleaks

• WinDbg kennt .NET primär nicht und kann daher mehr sehen als ein .NET Debugger

• !dumpheap -> Alle geladenen Objekte• !gcroot -> Garbage Collection Pfade zu den Objekten• !do <adr> -> Dump Object• !da <adr> -> Dump Array• !dso -> Dump Stack Objects (nicht präzise)

• !dumpheap –stat• !dumpheap –type <klassenName>• !gcroot <objektAdresse>

• Interessant zusammen mit HawkEye zum Identifizieren der Klassennamen von GUI-Elementen

• .dump /ma c:\dumps\mydump.dmp -> Dump (/ma: mini dump mit “All” Option)

Memory Dump Analyse

• ADPlus (Auto Dump Plus)– Erzeugt Memory Dumps sofort oder bei Exceptions

(allerdings nur unmanaged)– Dumps sind im Allgemeinen zwischen 40 und 500 MB

gross aber gut komprimierbar– Dumps beinhalten den gesamten Prozessspeicher und

mehr– Zum Beispiel auch Rekonstruktion der geladenen DLLs

und EXEs

ADPlus

• C:\> adplus –hang –p <PID>• C:\> adplus –hang –pn <ProzessName>• C:\> adplus –crash –p <PID>

Global Flags

• Tool in den Debugging Tools für Windows• Erlaubt das sofortige Starten eines Debuggers bei

Programmstart• Bei Services: „Interact with Desktop“ muss

aktiviert sein

DumpGen und SOS Assist

• SOS Assist: Grafisches Tools für WinDbg• DumpGen: Erzeugung von Dumps

• Beide Tools: Kostenlos. In ständiger Entwicklung. Aktuell: Sehr frühe Preview Version

• Download nur für Teilnehmer unserer Debugging-Kurse oder Vorträge. Verteilung im Unternehmen ist natürlich ok.

• URL: http://www.thinktecture.com/SOSAssist

Logging und LogViewer

• Alle API Zugriffe können von WinDbg geloggt werden– Parameter und Rückgabewerte

• !load logexts -> Lade Logging Erweiterung• !logm i * -> Inkludiere alle Module• !loge c:\logs -> Starte Log in c:\logs (Enable)• !logb f -> Flush des Log-Puffers• !logd -> Log Beenden (Disable)

• Betrachtung mit LogViewer (ebenfalls Debugging Tools für Windows)

Downloads

• MDbg Sample – Google: „mdbg sample“

• WinDbg, CDB, GFlags– Google: „debugging tools for windows“

• Hawkeye – Google: hawkeye .net

http://www.thinktecture.com/

ingo.rammer@thinktecture.comhttp://blogs.thinktecture.com/ingo/

In-depth support and consulting for

software architects and developers

{ }