Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Visual Studio 2013 Grundkurs

Breakpoints

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Ein Breakpoint stellt den Einstiegspunkt des Debuggers dar und hält die Anwendung an einer bestimmten Stelle im Quellcode an. Dabei stehen verschiedene Arten von Haltepunkten zur Auswahl.
07:54

Transkript

Wenn ich debuggen möchte und möchte, dass meine Anwendung an einer gewissen Stelle innerhalb des Quellcodes stehen bleibt, kann ich dies mit Breakpoints erreichen. Ein Breakpoint setze ich, indem ich entweder hier auf diese graue Leiste ganz links klicke und den quasi so setze oder ich stelle meinen Cursor in die entsprechende Zeile und drücke einmal F9. F9 deaktiviere ich ihn auch wieder. Diese Breakpoints sind erstmal ziemlich stupide, das heißt, immer wenn der Anwendungsfluss an dieser Stelle angelangt ist, hält der Debugger an und ich habe die Möglichkeit durch meinen Programm zu steppen. Das ist der normale Breakpoint. Es gibt zwei verschiedene Eigenarten und ich kann auch noch ein paar Dinge mit diesen Brakpoints machen und das wollen wir uns jetzt mal anschauen. Zum einen kann ich hier einen Rechtsklick auf den Breakpoint machen und sagen "Haltepunkt deaktivieren". Deaktivieren heißt, der Breaktpoint ist noch da, nur aktuell hält das Programm an der Stelle nicht an und zu einem späteren Zeitpunkt kann ich diesen Haltepunkt wieder aktivieren. Das zweite was wir machen können, wir können sagen, okay, dieser Breaktpoint soll nur dann greifen, es soll nur dann angehalten werden, wenn ein gewisser Speicherort erreicht ist. Schauen wir uns das mal an. Also wir möchten, wenn in Zeile 12 auf Zeichen 9 der entsprechende Programmfluss ist, dann soll angehalten werden. Mehr oder weniger ist das das Selbe, als wenn ich jetzt ein Breakpoint irgendwo hier reinsetze, das heißt, wenn ich so ein, wir haben ihn eben naiven Breakpoint genannt, setze, dann ist das so ein Speicherort Breakpoint wo hinterlegt ist, okay, wenn in dieser Zeile der Programmfluss angelangt ist, in dieser Zeile, an dem Zeichen, dann unterbreche bitte die Anwendung. So,dann gibt es noch einen weiteren Breakpunkt, und zwar die Bedingung. Bei der Bedingung kann ich eine unverständlich Ausdruck formulieren auch zugreifend hier auf die Variablen und wenn der "True" ist wird angehalten an der Stelle. Da ist jetzt hier gerade ungeeigneter Punkt zu. Wir springen mal mit F12 in DoBar, setzen hier einen Breakpoint und sagen, okay, wir möchten, dass dieser Breakpoint nur angeträgert wird, wenn der Wert von z1==4 . OK. Danach gehen wir wieder in Programm zurück, schauen hier z1 hat den Wert 4 und nicht 3 und wenn wir jetzt hier die Anwendung starten, dann wird der an der entsprechenden Stelle anhalten. Z1 ist 4, wir haben die Bedingung auf 4 gelegt, passt. Gehen wir einmal zurück in die Program und setzen diesen Wert an der Stelle mal auf den Wert 3, starten die Anwendung nochmal und sie schließt sich sofort wieder, das heißt, dieser Breakpoint wurde an der Stelle nicht angesteuert, also die Bedingung hat gegriffen, die wir definiert haben. Was gibt es noch? Es gibt die Trefferanzahl, ich kann jetzt hier sagen, okay, hier soll der Programmfluss nur dann angehalten werden, wenn eine gewisse Trefferzahl erreicht ist, also wenn die Trefferanzahl gleich, keine Ahnung, 2 ist, dann soll angehalten werden. Wir gehen mal zurück im Program und führen diese Zeile einfach zweimal aus mit Result2, hier sollte er nicht hängenbleiben, aber hier sollte er dann stehenbleiben und er ist jetzt gar nicht stehengeblieben. Warum ist er gar nicht stehengeblieben? Wir haben DoBar, nochmal kurz gucken, achso,wir haben jetzt hier, das ist auch noch eine Besonderheit, ich kann diese verschiedenen Elemente kombinieren, das heißt, ich kann sagen, das muss eine Bedingung erfüllt sein und es muss eine Trefferanzahl erfüllt sein. Wir nehmen den Haken hier bei Bedingung weg und sagen, die Bedingung soll aktuell nicht mehr greifen, wir möchten jetzt nur hier über die Trefferanzahl arbeiten, und wenn wir dann die Anwendung ausführen, dann wird der hier an der Stelle an halten und an der Stelle einmal das Aufruflistenfenster vorgestellt, dort kann ich quasi sehen, welche Methode diese Methode aufgerufen hat und mit einem Doppelklick jetzt auf Main, gelange ich an die Stelle, wo diese Methode aufgerufen wurde und ich sehe, okay, es ist tatsächlich der zweite Methodenaufruf, nicht der erste, also diese Bedingung funktioniert. Wir schauen uns mal die restlichen Breakpoints an, wie gesagt, das eben, den Fehler, den kurzen den wir hatten auch ganz nett zu demonstrieren,wie gesagt ich kann die Bedingung hier kombinieren, ich kann sagen, wenn das hier noch angehakt ist, dann wird an diesem Breakpoint nur gehalten, wenn Trefferanzahl und Bedingung stimmen. Es macht hier gerade natürlich in dem Zusammenhang keinen Sinn, also nehmen wir hier, nur noch die Trefferanzahl. Die nehmen wir jetzt auch erstmal raus, sagen hier, dann entsprechend "immer anhalten", das heißt, in unserem Breakpoint ist jetzt die Trefferanzahl deaktiviert und wir nehmen mal einen Filter. Und diesen Filter können wir jetzt folgendermaßen definieren: Ich kann sagen, wenn ich jetzt mit verschiedenen Threads zum Beispiel auf die Methode zugreife oder mit irgendwelchen Prozessen, was auch immer, kann ich hier sagen, okay, bitte halt nur an, wenn die ThreadId gleich, in diesem Fall zum Beispiel, 123 ist. Für uns ist meistens nicht so relevant, ist jetzt auch kein Breakpoint, den man öfters verwendet. Dann gibt es noch die Möglichkeit "Bei Treffer" zu sagen und dann wird einfach nicht an der Stelle angehalten, sondern es wird auf der Ausgabekonsole entsprechend etwas ausgegeben, das heißt, man sieht jetzt das Ganze ist eine Raute geworden, kein Kreis mehr und ich führe die Anwendung einmal aus und die Anwendung kehrt sofort wieder zurück. Wenn ich jetzt hier mal in die "Ausgabe" schaue, dann müssten irgendwo müsste eine Ausgabe gemacht sein. An der Stelle ist es hier. Also wir haben jetzt zweimal die Ausgabe hier gemacht, Function, ConsoleApplication, Class, DoBar im Hauptthread, also das was wir hier in unserem Breakpoint definiert haben, das kann ich quasi in diesen Pattern verbleiben lassen, ich kann aber auch hier unten verschiedene andere Variable, wie zum Beispiel aktuelle Anweisungen wäre jetzt aufgerufen, wie sieht der CALLSTACK aus und so weiter, kann ich an der Stelle also in unsere Ausgabe hier unten ausgeben lassen. Wir deaktivieren jetzt den Breakpoint mal wieder und schauen uns das letzte an, nämlich die "Bezeichnung bearbeiten", ist kein eigentlicher Breakpoint an sich, ich kann an dieser Stelle diesen Breakpoint irgendeine sinnvolle Bezeichnung geben, ich kann jetzt hier also sagen, keine Ahnung,"BReakpoint in DoBar". Klicke "Hinzufügen", okay und jetzt hat dieser Breakpoint hier einen Namen. Das sehen wir jetzt hier aktuell noch nicht, sehen wir später, wo wir das dann wieder schauen können. Eine weitere wichtige Funktion ist hier unten der Punkt "Exportieren". Beim Exportieren kann ich alle Breakpoints, die ich aktuell habe in eine XML-Datei speichern und später wieder in mein Visual Studio importieren. Und macht das ganze Sinn? Na ja, wenn ich aktuell in einer Längeren Debug Session bin und ganz viele Breakpoints in meiner Anwendung verteilt habe und jetzt weiß, okay, ich muss jetzt einfach 2-3 Tage irgendwas anderes machen und nach 3 Tagen werde ich dann weiter debuggen. Dann macht es durchaus Sinn, die in aktuellen Status meiner Breakpoints die ich gesetzt habe, das können durchaus viele sein, in der XML-Datei zu speichern und wenn ich nach 3-4 Tagen weiter an dem Debug-Problem arbeite diese wieder zu reimportieren und dann kann ich mit den entsprechenden Breakpoints weiterarbeiten. Das Ganze ist ein XML-Format, an dieser Stelle hier kann ich es exportieren. Wenn ich diese Breakpointe wieder reimportieren möchte macht man das an einer besonderen Stelle, und zwar gehe ich hier auf Debuggen FensterHaltepunkte, und damit schauen wir uns mal das Haltepunktefenster ein bisschen genauer an. Haltepunkte können wir im Code setzten, die sind natürlich hier auch entsprechend markiert, aber wenn man an vielen verschiedenen Stellen solche Haltepunkte hat, kann das Ganze schonmal schnell unübersichtlich werden, deswegen gibt es das Fenster der Haltepunkte und hier werden mir einfach die verschiedenen Haltepunkte angezeigt und hier taucht auch wieder die Bezeichnung auf, die wir eben vergeben haben. Hier würden dann auch Bedingung und Trefferanzahl angezeigt, wenn sie dann entsprechend eingeschränkt wären und die üblichen Funktionen, die wir eben gesehen haben, hier zum Beispiel das Deaktivieren kann ich hier auch machen ich kann auch hier eine neue Haltefunktion bei einer Funktion über dieses Menü hinzufügen, hier ist es natürlich wesentlich besser, kann hier einzelne Haltepunkte löschen, kann hier alle Haltepunkte löschen, die mit Suchkriterien übereinstimmen, das heißt, ich kann hier ein Suchfilter definieren,wenn ich viele Breakpunkte habe und sie dann da entsprechend löschen, Dann kann ich die Haltepunkte exportieren, das haben wir gerade schon im Menü gesehen das heißt, ich könnte hier eine XML-Datei auf meinen Desktop speichern, "xmlBreakpoints" und speichere das Ganze und danach kann ich hingehen und sagen, okay, ich entferne jetzt mal alle Breakpoints in der Anwendung durch klicken auf dieses Symbol und danach reimportiere ich einfach diese Breakpoints, mit einem Doppelklick sind sie wieder da aus dieser XML-Datei ausgelesen. Wir haben im Visual Studio gesehen, dass man mit vielen Arten von Breakpoints arbeiten kann. Standardmäßig wenn ich hier so einen Klick in diese Leiste mache, erstelle ich einen Brakpoint, der an einen Speicherort gebunden ist, also an eine Quelltextdatei in einer speziellen Zeile, für ein spezielles Zeichen. Das heißt, wenn dort der Ausführungsflüss erreicht ist, dann wird die Anwendung angehalten. Da gibt es zwar noch weitere Arten von Breakpunkten, wie zum Beispiel eine Bedingung muss erfüllt sein, eine Trefferanzahl, hier der "Filter", also das ThreadID oder so etwas und "beim Treffer" ist das hier kein richtiger Breakpoint, sondern er gibt in der Ausgabekonsole etwas aus, aber zählt trotzdem zu Kategorie der Breakpoints. Wenn ich Breakpoints verwalten möchte kann ich das Ganze in dem Haltepunktfenster machen, dort sehe ich alle momentan gesetzten Breakpoints, kann Sie aktivieren, deaktivieren, kann sie exportieren, importieren und nach Breakpoints suchen.

Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!