Visual Studio hat sicherlich einen sehr guten Debugger an Bord. Was aber ziemlich unterirdisch ist, ist das Immediate Fenster. Es kommt nie irgendwie Freude auf damit zu arbeiten, da alles zu umständlich und steif ist. Seit den Nuget-Paketen bringt der Visual Studio Nuget Packet Manager ein Powershell Eingabefenster mit die sogenannte Packet Manager Console. Wie wäre, wenn man dies nutzen könnte?
Damit könnte man kleine Debugskripte in Powershell schreiben oder bei neuen Libraries deren Funktionen mittels Powershell ausprobieren. Da Powershell ein ziemlich mächtiges und flexibles Typsystem (PSTYPE) im Hintergrund hat, kommt man viel schneller ans Ziel.
Entscheidend ist die Zeile:
$dte.Debugger.GetExpression("expression", 1, $true)
$dte wird von Visual Studio zur Verfügung gestellt und darüber erhält man Zugriff zum Debugger von dem aus man wieder beliebige Ausdrücke auswerten kann. Die Paramter sind hier beschrieben: http://msdn.microsoft.com/en-us/library/envdte.debugger.getexpression.aspx.
Im Beispiel von der Seite http://ogresoft.blogspot.de/2013/06/how-to-write-loop-or-lambda-expression.html wird dann
$a = $dte.Debugger.GetExpression("ints[$i]")
verwendet um aus einem Programm das Array ints abzufragen mit dem spezifischen Element $i und speichert es in $a. Man erreicht also durch die Verwendung von GetExpression den Export einer aktuellen Variablen in den Powershell Runspace, so dass man anschließend über eine normale Powershell Variable damit arbeiten kann.
Damit öffnet sich für alle DevOps die sich auch mit Powershell auskennen ganz viele neue Möglichkeiten um produktiver zu sein. Einen Nachteil hat die Sache jedoch: Tab-Completion und Intellisense funktionieren nicht bzw. nicht richtig. Aber vielleicht wird die Zukunft mehr bringen, wenn mit Powershell 5.0 neue Möglichkeiten beim Remote-Debugging kommen.
Hier noch etwas zu den Innereien von $DTE: http://ogresoft.blogspot.de/2013/06/how-to-write-loop-or-lambda-expression_17.html
Wer sich dafür interessiert, was sonst noch so geht, der verwendet
ls Variable:*
um herauszufinden, welche anderen Variablen außer $DTE vorhanden sind. Hier noch die Beschreibung zum DTE-Interface und was dies hergibt: http://msdn.microsoft.com/en-us/library/envdte.dte.aspx.
Wenn man nun etwas weitersucht und sich dem Thema widmet, dann findet man auf einmal dies: http://csharpening.net/?p=1726 Powershell Tools für Visual Studio mit einer REPL für Powershell! Dazu gibt es dann auch noch den Source Code auf Github: https://github.com/adamdriscoll/poshtools.
Neueste Kommentare