Mit den in Visual Studio eingebauten Debugging-Möglichkeiten hat die Fehlersuche viel von ihrer Mühsal verloren, zumal sich seit einigen VS Versionen selber Erweiterungen zu den mit Debugging verwendeten Framework-Klassen schreiben lassen. Trotzdem ballt sich in gewissen Situationen mal wieder die Faust im Sack zusammen: «Warum kann man denn hier nicht einfach…?».
Die hier vorgestellte Erweiterung OzCode bietet einen Satz von Goodies, die sich zwar mit gewissem Aufwand auch selbst bewerkstelligen liessen, aber wenn die Projektzeit knapp wird und die Fehlerquote nicht sinken will, hat man ja erst recht keine Zeit für solche Dinge, sondern möchte schnelle Antworten haben. Zusammengefasst bietet OzCode ein Dutzend Funktionen an. Die für mich nützlichsten davon betreffen das Suchen, Durchforsten und Vergleichen von mehreren Instanzen einer Klasse zur Laufzeit.
Die Search Funktion
Mit ihr kann in einer Instanz bzw. in einer Auflistung von Instanzen nach einem beliebigen String gesucht werden, der sowohl in einem Property-Name als auch im Property-Wert vorkommt:
Hier wurde in der Liste imageModes nach ‹Fluoro› gesucht. Im Resultat-Panel erhalte ich einen Filter aller Objekte mit dem gesuchten Kriterium.
Die Reveal Funktion
Wer kennt das nicht: man hat eine Liste von n Instanzen, und da die ToString-Methode nicht überschrieben bzw. keinen eindeutigen Erkennungsstring für die Instanz ausspuckt, sieht man im Debugger halt n mal den .NET-Klassennamen. Sucht man nun in diesem Haufen nach dem Wert einer bestimmten Property, muss man im Extremfall alle n Instanzen im Tree öffnen.
Mit der Reveal-Funktion lassen sich für eine Klasse bequem eine oder mehrere Properties als «Favoriten» markieren, so dass das Resultat genau diese Property-Werte hinter jeder Instanz auflistet:
Das Gute daran ist, dass sich OzCode diese Favoriten merkt, selbst über das Schliessen von Visual Studio hinaus, so dass nicht bei jeder Debugging-Session von vorne begonnen werden muss. Des weiteren stehen die so markierten Elemente auch in anderen Funktionen zur Verfügung.
Die Compare Funktion
Damit lassen sich zwei Instanzen einer Klasse bezüglich Inhalt miteinander vergleichen. Properties unterschiedlichen Inhalts werden dabei rot hervorgehoben. Die Handhabung funktioniert bei dieser Funktion ähnlich wie in BeyondCompare. Das ganze funktioniert für Einzelinstanzen wie auch Instanzen aus einer Liste.
Die Show All Instances Funktion
Geistern ungewollt mehrere Instanzen einer Klasse herum, obwohl man nur eine erwartet, können sich ziemlich schwer zu findende Fehler daraus ergeben.
Mit dieser Funktion kann man sich nun alle Instanzen eines Typs ansehen, die im Speicher geladen sind:
Es gibt noch Funktionen, die nur im Enhanced Mode benutzt werden können. Darunter sind Simplify und Foresee.
Ich konnte diese Funktionen nicht selbst testen, da ich nur die Trial-Version installiert hatte, und in dieser der Enhanced Mode nicht freigeschaltet ist.
Mit Simplify kann man verschachtelte logische Ausdrücke zur Laufzeit durch Anzeige ihrer Teilergebnisse auswerten, während Foresee dafür nützlich ist, wenn z.B. ein Fehler erst im n-ten Iterationsschritt auftritt. Es durchläuft die Iteration bis zum n-ten Schritt und kann anhalten. Dazu «sieht» es voraus, welche Werte die Daten im jeweiligen Iterationsschritt annehmen.
Filtering
Mit der Filter-Funktion können alle Instanzen eines Typs angezeigt werden, die eine Bedingung erfüllen, z.B. deren Property xy einen bestimmten Wert hat:
Hier werden alle Instanzen gezeigt mit AcquisitionModeId = ‹Highres›.
Conditional Breakpoint
Den conditional breakpoint kann man schon mit Visual Studio Bordmitteln erzeugen. OzCode bietet dazu einen kleinen Wizard aus dem Kontextmenü z.B. einer Property im Debug-Panel an, z.B.
Kreiere einen breakpoint, wenn die gewählte Property den Wert soundso hat:
Tracepoint Messages
Mit OzCode ist es möglich, beim Debuggen eine Art Logging zu erstellen. Dazu kann man sogenannte Tracepoints erstellen und diese mit einem Text (als Expression) versehen, in welchen Variablenwerte geschrieben werden können. Im zugehörigen Panel werden dann beim Durchlaufen die jeweiligen Tracepoints mit der angegebenen Expression samt Timestamp aufgelistet:
Zu guter Letzt gibt es die nützliche QuickAttach Funktion. Jedesmal, wenn man normalerweise den VS-Debugger an eine laufende Applikation attachen möchte, muss man sich durch die gleichen Menüpunkte klicken.
OzCode merkt sich den gewählten Prozess (auch über das Beenden von Visual Studio raus), und im Handumdrehen (der Eintrag kann auch an einen Tastatur-Shortcut gebunden werden) lässt sich ein Attachen bewerkstelligen.
Fazit
OzCode erweitert den Visual Studio Debugger um eine Handvoll nützlicher Funktionen, die im Einzelfall einiges an Zeit und Schweissperlen sparen können. Gemäss eigenen Angaben wird die Funktionalität laufend erweitert und verbessert – über einen Menüpunkt im OzCode-Toolbar lassen sich sogar Funktionsvorschläge an die Entwickler senden.
Die Einzelversion kostet im Moment noch 70$, eine Firmenlizenz rund 100$. Dies gilt, so lange man gemäss Homepage unter den ersten 5000 Käufern ist. Die Trial-Version ist 30 Tage gültig, man wird aber nach dem 20.Tag beim Benützen von Visual Studio täglich gepiesakt, dass sie jetzt nur noch soundso viele Tage gültig ist.
Schreiben Sie einen Kommentar