Zum Fußzeileninhalt springen
Iron Academy Logo
C# Tools & Produktivität

Erweiterte Haltepunkte und Tracepoints in C#

Tim Corey
22m 36s

Das Debugging ist ein wesentlicher Bestandteil des Arbeitsablaufs eines jeden Entwicklers. Bei einem komplexen C#-Projekt geht es nicht nur um das Schreiben von Code, sondern auch um das effiziente Finden und Beheben von Fehlern. Hier kommen fortschrittliche Haltepunkttechniken ins Spiel.

In seinem Video "Advanced Breakpoints and Tracepoints in C#" zeigt Tim Corey, wie man die Vorteile des Visual Studio Debugger voll ausschöpfen kann. Die meisten Entwickler sind mit grundlegenden Haltepunkten vertraut, aber diese Sitzung taucht tiefer ein und zeigt, wie Funktionen wie bedingte Haltepunkte, Tracepoints und Aktionen Ihnen helfen können, Probleme schneller und effizienter zu diagnostizieren. Tim erklärt alles klar und deutlich, so dass diese fortschrittlichen Tools für die tägliche Entwicklung zugänglich und praktisch sind. Lass uns beginnen!

Die Rolle der Fehlersuche in der Entwicklung

Zu Beginn betont Tim, dass ein großer Teil der Arbeit eines Entwicklers darin besteht, Probleme zu beheben - Fehler, die sich in unsere Anwendungen einschleichen. Effizientes Debugging bedeutet schnelleren Fortschritt, und das Visual Studio-Toolset bietet fortschrittliche Techniken zur Rationalisierung dieses Prozesses.

Was ist ein Haltepunkt?

Der einfachste C-Haltepunkt wird durch Klicken auf den linken Rand der Codedatei eingefügt. Wenn die Ausführung diese Zeile erreicht, wird sie angehalten. So können Sie den aktuellen Laufzeitkontext überprüfen - Variablen anzeigen, durch den Code schreiten und genau verstehen, was hinter den Kulissen passiert. Tim merkt an, dass viele Entwickler zwar mit dieser grundlegenden Funktion vertraut sind, dass es aber eine reiche Welt dahinter gibt, die oft ungenutzt bleibt.

Tracepoints und Protokollierung im Ausgabefenster

Tim erklärt, wie man einen Tracepoint einfügt, indem man mit der rechten Maustaste auf die Gosse klickt und aus dem Dropdown-Menü auswählt. Ein Tracepoint unterbricht die Ausführung nicht, sondern protokolliert eine Meldung im Ausgabefenster, wie z. B.:

Der Wert von i ist {i}

Wenn Sie eine Variable mit geschweiften Klammern umgeben, wird ihr Wert gedruckt. Dies ist äußerst praktisch, wenn man Einblick in eine Schleife haben möchte, ohne wiederholt auf "Weiter" zu drücken. Es ist vergleichbar mit der Verwendung einer Protokollanweisung, die jedoch über die Debugger-Schnittstelle verwaltet wird und nicht fest in Ihre Methode einkodiert ist. Tim zeigt auch, wie man diese Aktion so konfiguriert, dass sie wahlweise unterbrochen oder fortgesetzt werden kann.

Temporäre Haltepunkte: One-and-Done Debugging

Als Nächstes zeigt Tim, wie man einen temporären Haltepunkt erstellt - leicht zu erkennen an einem kleinen Uhrensymbol. Sobald es während der Ausführung getroffen wird, deaktiviert es sich automatisch. Dies ist nützlich, wenn Sie nur einmal überprüfen müssen, ob eine Anweisung erreicht wurde, und hilft, das Rauschen in Ihrer Debugging-Sitzung zu reduzieren. Tim demonstriert das Aktivieren und Deaktivieren solcher Haltepunkte, ohne sie zu löschen, was Ihnen eine flexible Kontrolle über die Debug-Ansicht ermöglicht.

Bedingte Haltepunkte mit Ausdrücken

Dieser Abschnitt behandelt eine der vielleicht leistungsfähigsten Funktionen: bedingte Haltepunkte. Tim setzt einen mit der Bedingung i > 10, was bedeutet, dass der Haltepunkt nur ausgelöst wird, wenn der Ausdruck als wahr bewertet wird. Im Eigenschaftsfeld des Haltepunkts können Sie Bedingungen auswählen wie:

  • Trefferquote

  • Ausdruck

  • Filter

Mit diesen Tools können Sie Haltepunkte mit granularer Logik versehen und so sicherstellen, dass Sie nur dann eine Pause machen, wenn sinnvolle Kriterien erfüllt sind. Dies ist besonders hilfreich in langen Schleifen oder bei der Untersuchung von Anomalien im Verhalten Ihres Codes.

Abhängige Haltepunkte: Verknüpfung von Debug-Logik

Wenn ein Haltepunkt erst ausgelöst werden soll, nachdem ein anderer getroffen wurde, empfiehlt Tim die Verwendung abhängiger Haltepunkte. Dies ist ideal bei Anwendungen mit mehreren Threads oder komplexen Modulinteraktionen, bei denen die Instanzen einer Methode erst dann verrückt spielen, wenn eine vorherige Bedingung erfüllt ist.

In den Haltepunkt-Einstellungen zeigt Tim, wie man einen Funktionsnamen auswählt und einen anderen Haltepunkt so konfiguriert, dass er nur aktiviert wird, wenn diese Funktion erreicht wurde. Dadurch wird sichergestellt, dass die Folgelogik in einem Projekt nur dann überprüft wird, wenn das frühere Verhalten dies rechtfertigt - so bleibt Ihr Debugger konzentriert und effizient.

Das Haltepunktfenster und die Verwaltung mehrerer Haltepunkte

Tim öffnet das Fenster Haltepunkte über Debug > Fenster > Haltepunkte oder Strg + Alt + B. Dieses Fenster listet jeden aktiven Haltepunkt im Projekt auf und bietet Werkzeuge wie:

  • Exportieren/Importieren: Speichern Sie Haltepunkte als XML-Datei und erstellen Sie wiederverwendbare Debugging-Konfigurationen.

  • Beschriftung: Fügen Sie Bezeichnungen wie "Test" oder "Demo" hinzu, um sie nach ihrem Zweck zu kategorisieren.

  • Gruppieren: Weisen Sie Haltepunkte zu Gruppen wie "kritische Fehler" oder "normaler Ablauf" zu Sie können dann ganze Gruppen aktivieren oder deaktivieren, was beim Jonglieren mit verschiedenen Auswertungsszenarien nützlich ist.

Tim zeigt auch, wie man eine Standardgruppe einrichtet, so dass jeder neue Haltepunkt automatisch in diesen Kontext eingefügt wird.

Funktionshaltepunkte nach Namen

Was ist, wenn man bei jedem Aufruf einer Methode abbrechen möchte, unabhängig davon, wo sie definiert ist? Hier kommen Funktionsunterbrechungspunkte ins Spiel. Tim gibt den Funktionsnamen PrintInfo ein und demonstriert, wie der Debugger ausgelöst wird, sobald eine beliebige Version dieser Methode aufgerufen wird, unabhängig davon, wo sie sich befindet - sogar in verschiedenen Dateien oder DLLs.

Dies ist perfekt für die Fehlersuche bei stark überladenen Methoden oder Visual Studio Code-Projekten mit gemeinsamen Methodennamen, die in mehreren Kontexten verwendet werden.

Break When Value Changes: Erweiterte Watchpoints

Gegen Ende des Videos geht Tim auf eine Nischenfunktion ein, die jedoch sehr leistungsfähig ist: Unterbrechung bei Wertänderungen. Sie können mit der rechten Maustaste auf eine Variable im Fenster Locals klicken und diese Option auswählen. Sie funktioniert jedoch nur unter bestimmten Umständen - typischerweise für verfolgte Eigenschaften auf dem verwalteten Heap in Klasseninstanzen.

Es gelten Systembeschränkungen:

  • x64-Architektur: Bis zu vier verfolgte Variablen.

  • ARM64: Zwei.

  • ARM32: Nur eine.

Diese Nachverfolgung auf Hardware-Ebene bietet einen tiefen Einblick in die Zustandsänderungen einer Variablen, wird aber aufgrund dieser Einschränkungen nur selten verwendet.

Abschließende Gedanken

Abschließend wiederholt Tim einen wichtigen Punkt: Die Beherrschung der erweiterten Debugging-Tools von Visual Studio macht Sie zu einem schnelleren und effektiveren Entwickler. Von Tracepoints bis hin zu bedingten Haltepunkten, vom Überfahren von Variablen bis hin zur Verwendung der Debug-Ansicht - alle diese Tools helfen Ihnen, Fehler mit Zuversicht anzugehen.

Abschluss

Indem Sie Tim Coreys komplettes Video zu Haltepunkten in Visual Studio durchgehen, haben Sie nun ein detailliertes Verständnis dafür, wie Sie diese Tools nutzen können, um Ihren Debugging-Workflow zu verfeinern. Jeder Fehler kann gelöst werden - man braucht nur die richtige Debugger-Strategie.

Hero Worlddot related to Erweiterte Haltepunkte und Tracepoints in C#
Hero Affiliate related to Erweiterte Haltepunkte und Tracepoints in C#

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an