Freitag, 19. Juni 2009

Code-Debugging auf Tastendruck

Nach längerer Zeit habe ich endlich wieder einen Moment Ruhe, einen Eintrag zu schreiben.

Heute möchte ich erklären, wie man sich das Debuggen von im SharePoint-Kontext laufendem Code während des Entwickelns extrem vereinfachen kann:

Normalerweise muss man sich einfach an den laufenden w3wp-Prozess anhängen (Visual Studio -> Debug -> Attach to Process -> w3wp.exe(n) auswählen). Das ist nicht besonders schlimm, wird aber zu extrem nerviger Klickerei, wenn man zwischendurch mehrfach einen IISRESET ausführt und die Verbindung zum Prozess verloren geht.

Abhilfe schafft da ein kleines Macro im Visual Studio welches dann mittels Shortcut aktiviert werden kann.

Zu erst wird der Macro Explorer ausgewählt:



Über das Kontextmenü des VSDebuggers legt man ein neues Macro an:



Dadurch wurde VSDebugger ein neues Macro namens Macro1 hinzugefügt:



Dieser Code-Rumpf wird ersetzt durch den folgenden Code:


' This subroutine attaches to w3wp.exe:
Sub AttachToW3WP()
Dim attached As Boolean = False
Dim proc As EnvDTE.Process

For Each proc In DTE.Debugger.LocalProcesses
If (Right(proc.Name, 8) = "w3wp.exe") Then
proc.Attach()
attached = True
End If
Next

If attached = False Then
MsgBox("Couldn't find w3wp.exe")
End If

End Sub


Wird nun abgespeichert, sieht man im Macro-Explorer das neue Macro:



Damit ist das Macro einsatzbereit. Zu guter Letzt legen wir einen Shortcut in den Visual-Studio-Optionen (Tools-> Options) an um dessen Ausführung zu starten.



1) Unter Environment->Keyboard suchen wir zuerst nach dem Macronamen "attachtow3wp".
2) In der Auswahl erscheint nun unser neues Macro das angeklickt wird.
3) Der neue Shortcut wird dann in dem Feld "Press shortcut keys" gedrückt. Ich persönlich bevorzuge STRG+SHIFT+3 aber das kann jeder frei wählen.
4) Mittels des "Assign"-Buttons wird der Shortcut zugewiesen und als letztes
5) via OK global aktiviert.

Damit funktioniert STRG+SHIFT+3 jederzeit sobald der w3wp-Prozess verfügbar ist. Direkt nach einem IISRESET ist der w3wp-Prozess nicht verfügbar sondern erst, sobald man z.B. einmal die SiteCollection im Browser aufgerufen hat.