Wie verwende ich den Debugger von Visual Studio?
Bugs sind kleine, gemeine Schädlinge, die sich in unserem Programmcode breitmachen, und ihn daran hindern, korrekt zu funktionieren. Aber wie spürt man einen Bug zwischen tausenden von Programmzeilen auf? Seit dem ersten Bug von 1947 haben findige Menschen dazu beigetragen, dass uns diese Arbeit heute zum großen Teil von einem Programm abgenommen wird: dem Debugger. Und das Beste daran ist, dass er uns sogar in der kostenlosen Express-Version von Visual Studio zur Verfügung steht.
Aber wie verwendet man den Debugger, um einen Fehler aufzuspüren?
In den meisten Fällen macht sich ein Programmfehler dadurch bemerkbar, dass das Programm nicht tut, was es tun soll oder dadurch, dass eine Ausnahme (Exception) ausgelöst wird. In letzterem Fall hat man zwar die Stelle lokalisiert, an der der Fehler seine Auswirkung gezeigt hat, aber noch nicht dessen Ursache. Um an die Fehlerursache zu kommen, müsste man wissen, welche Werte bestimmte Variablen haben. Und es wäre hilfreich, das Programm Schritt für Schritt bzw. Zeile für Zeile auszuführen und zu beobachten, wie sich diese Werte ändern. Damit haben wir bereits die wesentlichen Funktionen des Debuggers in Visual Studio vorweggenommen:
Einzelschritt-Debugging (Single Step Debugging)
Hat man sich mit den bisher genannten Möglichkeiten einen Überblick über den aktuellen Zustand des Programms geschaffen, will man oft wissen, welcher Code weiterhin ausgeführt wird, und wie sich dadurch die Werte der Variablen ändern. So kann man genau die Codezeile aufspüren, in der die Fehlerursache liegt (und sie beheben).
Das geht mit der Einzelschritt-Funktion (F11). Dann wird die Programmausführung nach jeder Anweisung wieder unterbrochen und man kann Schritt für Schritt durch das Programm gehen, um den Programmablauf genauestens nachzuvollziehen. Mit F10 kann man Methoden-Aufrufe überspringen, um zu verhindern, dass jede einzelne Anweisung innerhalb einer aufgerufenen Methode ausgeführt wird.
Noch schneller ist es manchmal, einige zusätzliche Haltepunkte an den interessanten Codestellen zu setzen und dann das Programm mit F5 weiter auszuführen. Das Programm wird dann beim ersten Haltepunkt, der erreicht wird, wieder angehalten. So lässt sich gezielt herausfinden, welche Codeblöcke bei der Ausführung durchlaufen werden und in welcher Reihenfolge sie dabei aufgerufen werden.
Die genannten Möglichkeiten des Einzelschritt-Debuggings helfen somit einerseits bei der Überwachung des Programmzustands (z.B. fehlerhafte Werte in Variablen) als auch beim Aufspüren von Fehlern im Programmablauf (z.B. bei fehlerhaften Abbruchbedingungen in Schleifen).
Weeks of programming can save you hours of planning
Verständlich geschrieben. Und sicher hilfreich für jeden Ein- / Umsteiger. 👍
Nebensätzlich erwähnenswert wäre sicher noch das "Attach Process", da früher oder später jeder vor der Aufgabe steht z.B. einen Service zu debuggen.
Eine schöne Abrundung für die Erklärung von Breakpoints wäre noch das De- Aktivieren. Was m.E. sehr hilfreich ist für das Szenario in dem man zuerst mehrere BPs setzt um einen grösseren Ablauf anzuschauen und dann nach und nach vertieft weitere BPs hinzufügt.
Für die jenigen die nur in der Expressversion von Visual Studio [2010 oder tiefer] arbeiten, gibt es die Möglichkeit der bedingten Haltepunkte (Conditional Breakpoints) nicht von Haus aus.
Allerdings kann man sich mit:
#if DEBUG
if( i == 0 ) System.Diagnostics.Debugger.Break();
#endif
seinen eigenen Conditional Breakpoint bauen.
++Rekursion ++
(lat. , die) siehe Rekursion
Für die jenigen die nur in der Expressversion von Visual Studio arbeiten, gibt es die Möglichkeit der bedingten Haltepunkte (Conditional Breakpoints) nicht von Haus aus.
Seit Visual Studio Express 2012 scheint das auch da möglich zu sein. 😃
Huch das habe ich nicht geprüft, Danke! 😃 Hatte nur gemerkt das es in 2010 nicht klappt.
Ich habe meinen Beitrag entsprechend geändert.
++Rekursion ++
(lat. , die) siehe Rekursion
Aufgrund der häufigen Verweise auf diesen Artikel möchte ich noch anmerken, dass das openbook: Visual C# vom Rheinwerk-Verlag dieses Thema auch behandelt.
Kapitel 7: Fehlerbehandlung und Debugging beinhaltet Kapitel 7.3: Fehlersuche mit Visual Studio [...].
Vielleicht hilft dem einen oder anderen die andere Art der Formulierung weiter.
VG Ezio
@MrSparkle:
Ich bin mir nicht ganz sicher, ob das hier rein gehört, oder lieber ins Kritik-Forum, aber dein Artikel scheint etwas zerpflückt 🙂
Beim Zitieren bekomme ich auch nicht das, was ich aus dem Forum so kenne, sondern scheinbar den ganzen HTML-Code des Beitrags.
Sieht aus, als hast Du hier Funktionen genutzt, die das neue Forum (noch) nicht unterstützt?
Außerdem gibt's die Bilder nicht mehr.
Kannst Du das korrigieren?
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Danke für den Hinweis! Da ist beim Migrieren etwas verloren gegangen. Wir werden uns darum kümmern.
Weeks of programming can save you hours of planning