Visual Studio DEV 11 <3 WinDBG
In der aktuellen Visual Studio Developer Preview von der Build Konferenz gibt es eine neue Version des WDK (Windows Driver Kit) das eine Implementierung von WinDBG (Windows Debugger) für Visual Studio mitliefert.
Hat man Sowohl DEV 11 als auch das WDK installiert (Abkürzung), kann man sowohl von einem Windows User Mode als auch von einem Kernel Mode Debugger profitieren. Hier kommen die Notwendigen Schritte um “Managed Code” mit WinDBG zu debuggen.
Nach der Installation kann man eine beliebige Applikation debuggen. Und was könnte eine beliebigere Applikation sein als eine Konsolen Applikation?!
Ich starte also meine beliebige Applikation “beliebig.exe” und Starte eine Instanz von Visual Studio DEV 11.
Menu > Debug > Attach to Process…
Im nächsten Dialog muss man sich zwischen den unterschiedlichen Debuggern entscheiden. Und in die Liste der Debugger sind nun der Windows Kernel Mode Debugger und der Windows User Mode Debugger hinzugekommen.
Ich wähle den Windows User Mode Debugger.
Als nächstes kann ich die Maschine auswählen, die ich gerne debuggen möchte. Was impliziert das “Remote Debugging” möglich ist.
Als nächstes erscheint eine Liste aller aktuellen Prozesse. Ich wähle “beliebig.exe” aus und sage Attach. Nach einigem überlegen, ob der Debugger das wirklich tun soll, entscheidet er sich in der Regel dafür, und hängt sich an den Prozess an.
Fast geschafft. Um “Managed Code” zu debuggen kann man zwischen unterschiedlichen Tools entscheiden. Das vom Hause Microsoft mitgelieferte Packet heißt SOS (Son of STRIKE).
STRIKE ist ein internes Tool, dass wir während der Entwicklung von .net in der Version 1 verwendet haben. Als .net und die Tools sich weiterentwickelten wurde aus STRIKE SOS. Heute ermöglicht es SOS dem Entwickler, einen tiefen Einblick in die CLR zu bekommen.
Um die Fehlermeldung:
The call to LoadLibrary(sos) failed, Win32 error 0n2
"The system cannot find the file specified."
zu vermeiden, muss man folgende Befehle eingeben.
Applikation < CLR Version 4:
.loadby sos mscorwks
Für Applikationen > CLR 4 gilt:
.loadby sos clr
Und schon lassen sich alle Befehle von SOS 2 oder SOS 4 eingeben.
Ja, mit dem .net Framework 4 haben wir eine neue Version der CLR siehe Diagramm.
Wer sich fragt wo Version 3 geblieben ist? Viele Kunden haben uns gesagt: “Bei Microsoft muss man mindestens auf Version 3 warten.” Also dachten wir, dieses mal nicht. Nein, der wahre Grund dafür ist, dass es in der Version 3/3.5/3.5SP1 keine neue Version der CLR gab. Um in dem Versionsnummernchaos Konsistenz herzustellen hat unser Marketing entschieden direkt auf 4 zu springen.
Anyway, Happy Debugging
Mehr zu diesem Thema:
- Getting started with WinDBG and SOS
- Intro to WinDBG for .NET Developers
- SOS not just an ABBA Song
- If broken it is, fix it you should
Und jetzt im Ernst, wer will schon native debuggen? Egal, wer ernsthaft darüber nachdenkt damit anzufangen hier meine Bücherliste zu diesem Thema.
https://www.amazon.de/Windows%C2%AE-Internals-Fifth-PRO-Developer-Russinovich/dp/0735625301/ref=sr_1_1?ie=UTF8&qid=1320691599&sr=8-1
https://www.amazon.de/Advanced-Windows-Debugging-Administering-Addison-Wesley/dp/0321374460/ref=pd_bxgy_eb_img_b
https://www.amazon.com/Essential-NET-Common-Language-Runtime/dp/0201734117
https://www.amazon.de/CLR-via-Third-Jeffrey-Richter/dp/0735627045/ref=sr_1_1?ie=UTF8&qid=1320691813&sr=8-1
https://www.amazon.de/Advanced-Debugging-Addison-Wesley-Microsoft-Technology/dp/0321578899/ref=pd_sim_eb_5