Grundlegendes zum .NET-Debugger in Visual Studio
In der vorigen Lerneinheit haben Sie erfahren, dass ein Debugger Ihnen hilft, die Ausführung Ihres Programms zu steuern und seinen Zustand zu beobachten. In diesem Abschnitt lernen Sie, wie Sie diese beiden Aufgaben in Visual Studio erledigen.
Zunächst erfahren Sie, wie Sie den Visual Studio-Debugger mit .NET verwenden.
Erste Schritte mit dem Visual Studio-Debugger
Verwenden Sie die Startschaltfläche (das einfarbige grüne Dreieck) in der Visual Studio-Befehlsleiste, um die Anwendung mit dem angefügten Debugger zu starten. Beachten Sie, dass die Befehlsleiste jetzt den Projektnamen enthält. Sobald die App ausgeführt wird, werden mehr Debugtools und Features verfügbar.
- Die Projektmappenkonfiguration gibt an, ob unsere App im Debug- oder Releasemodus ausgeführt wird.
- Plattformkonfiguration gibt eine CPU-Zielplattform an
- Startet die App mit angefügtem Debugger
- Startet die App ohne angefügten Debugger
Steuern der Ausführung
Sobald die App ausgeführt wird, werden die Debugsteuerelemente neben der Startschaltfläche angezeigt, auf die Sie geklickt haben, um die App zu starten.
- 1) Ausführung fortsetzen oder anhalten. Wenn die Ausführung an einem Haltepunkt angehalten wird, klicken Sie auf diese Schaltfläche, um fortzufahren, bis der nächste Haltepunkt erreicht wird. Wenn das Programm ausgeführt wird, wechselt die Schaltfläche zu einer Schaltfläche zum Anhalten, die Sie verwenden können, um die Ausführung anzuhalten.
- 2) Hot Reload Steuerelemente. Mit diesem In Visual Studio 2022 eingeführten Feature können Sie Änderungen vornehmen und den Code aktualisieren, ohne die App neu zu starten.
- 3) Beenden. Diese Schaltfläche beendet die ausgeführte Anwendung und trennt auch den Debugger.
- 4) Neu starten. Beendet die App und startet sie mit angefügtem Debugger neu.
-
5) Schrittweise ausführen. Handelt es sich bei der nächsten Anweisung um einen Funktionsaufruf, wird nach unten in die erste Codeanweisung dieser Funktion gesprungen (entspricht dem Befehl
step). - 6) Überspringen: Wenn die nächste Anweisung ein Funktionsaufruf ist, wird der Code ausgeführt, aber sofort mit der nächsten Codezeile in der aktuellen Funktion fortgefahren.
-
7) Rücksprung: Führen Sie innerhalb einer Funktion den verbleibenden Code dieser Funktion aus, und gehen Sie dann nach dem anfänglichen Funktionsaufruf zurück zur Anweisung (wie beim Befehl
out).
Haltepunkte sind eines der Hauptfeatures des Debuggens und integrieren sie in diese Steuerelemente, sodass wir sie ausführlicher untersuchen können.
Haltepunkte
Wie Sie in der vorherigen Lerneinheit erfahren haben, hilft ein Debugger dabei, die Ausführung des Programms zu analysieren und zu steuern. Wenn Sie Ihre App mit angefügtem Visual Studio-Debugger starten, beginnt die Ausführung des Codes sofort. Da Ihr Code sehr schnell ausgeführt wird, müssen Sie in der Lage sein, das Programm bei jeder beliebigen Anweisung anzuhalten. Dazu verwenden Sie Haltepunkte.
Sie können in Visual Studio einen Haltepunkt hinzufügen, indem Sie in der Zeile, in der Sie anhalten möchten, auf der linken Seite auf die Zeilennummer klicken. Sobald der Haltepunkt aktiviert ist, sollte ein roter Kreis angezeigt werden. Klicken Sie noch einmal auf den roten Kreis, um den Haltepunkt zu entfernen.
Wenn Sie mit der rechten Maustaste klicken, um einen Haltepunkt hinzuzufügen, oder mit der rechten Maustaste auf einen vorhandenen Haltepunkt klicken, können Sie auch " Bedingten Haltepunkt hinzufügen" auswählen. Diese spezielle Art von Haltepunkt ermöglicht es Ihnen, eine Bedingung oder Kriterien für den Zeitpunkt des Auslösens des Haltepunkts zu definieren. Mit diesem Menü können Sie auch die Option "Nur aktivieren" auswählen, wenn der folgende Haltepunkt trefferfähig ist , um unter anderem eine verkettete Ausführung von Haltepunkten zu erstellen.
Sie können auch einen temporären Haltepunkt verwenden, wenn Sie den Code nur einmal unterbrechen möchten. Sie können temporäre Haltepunkte anwenden, indem Sie in der Haltepunktspalte mit der rechten Maustaste klicken und "Temporären Haltepunkt einfügen" auswählen. Die temporären Haltepunkte werden entfernt, nachdem sie erstmals erreicht wurden.
Sie können auch Ablaufverfolgungspunkte hinzufügen, indem Sie in der Haltepunktspalte mit der rechten Maustaste klicken und "Ablaufverfolgungspunkt einfügen" auswählen. Mit Ablaufverfolgungspunkten können Sie Informationen im Ausgabefenster protokollieren. Hierfür können Sie Bedingungen konfigurieren, ohne die Codeausführung zu ändern oder zu beenden.
Schließlich können Sie im Fenster Haltepunkte (Debuggen>Fenster>Haltepunkte) alle in Ihrem Code platzierten Haltepunkte anzeigen und umschalten. Außerdem können Sie das Halten bei abgefangenen oder nicht abgefangenen Ausnahmen aktivieren oder deaktivieren. Im Panel Haltepunkte können Sie den Programmzustand überprüfen und mithilfe der Aufrufliste die Ursache einer Ausnahme zurückverfolgen, wenn eine auftritt.
Debugtools von Visual Studio
Nachdem Sie Ihre Haltepunkte eingerichtet und Die App gestartet haben, werden neue Informationsfenster und -steuerelemente auf dem Bildschirm angezeigt.
- Debugger-Startsteuerelemente.
- Die aktuelle Haltepunkt- und Ausführungslinie.
- Überwachungsfenster für die Überwachung von Variablenwerten.
- Haltepunktefenster zum Anzeigen aller Haltepunkte.
Sie können auch auf andere hilfreiche Debugfenster zugreifen, indem Sie auf der oberen Navigationsleiste auf Debuggen>Fenster klicken. Zu häufig verwendeten Tools gehören z. B. folgende:
- Aufrufstapelfenster: Ermöglicht es Ihnen, anzuzeigen, welche Methoden aufgerufen wurden.
- Direktfenster: Ermöglicht das Schreiben und Auswerten von Ausdrücken beim Debuggen.
- Fenster „Auto“: fügt Variablen im aktuellen Kontext automatisch Überwachungselemente hinzu.
- Ausgabefenster: zeigt die Ausgabe von Protokollierungsanweisungen oder Code an, der in die Konsole schreibt.
Überwachen und Bearbeiten des Zustands von Variablen
Wenn Sie die Ursache eines Programmfehlers analysieren, können Sie den Zustand von Variablen auf unerwartete Veränderungen untersuchen. Es gibt mehrere Überwachungsfensteroptionen in Visual Studio, die Sie in verschiedenen Debugkontexten verwenden können, um den Zustand Ihrer Variablen zu überwachen.
- Überwachungsfenster: ermöglicht das Nachverfolgen ausgewählter Variablen und Ausdrücke während des Debuggens.
- Fenster „Lokale Variablen“: zeigt im aktuellen Ausführungsbereich und -kontext automatisch Variablen an.
- Fenster „Auto“: zeigt automatisch Variablen an, die in der aktuell ausgeführten oder vorherigen Zeile verwendet werden.
- Direktfenster: ermöglicht die Liveauswertung von Ausdrücken und Variablen während des Debuggens.
Die meisten dieser Fenster ermöglichen Ihnen auch, auf den Wert einer Variablen doppelzuklicken und den Wert während des Debuggens zu ändern.
Das Überwachungsfenster ist nützlich zum Nachverfolgen von Variablen während der Ausführung des Codes. Sie können mit der rechten Maustaste auf eine Variable in Ihrem Editor klicken und Zur Überwachung hinzufügen auswählen. Diese Variable wird nun im Überwachungsfenster angezeigt und automatisch aktualisiert, während Ihre App ausgeführt wird.
Sie können auch mit der rechten Maustaste auf Variablen in den Fenstern Auto oder Lokale Variablen klicken, um ein Überwachungselement hinzuzufügen.
Eine weitere produktive Möglichkeit zum Anzeigen und Analysieren der Variableninformationen während des Debuggings ist die Verwendung von DataTips. Wenn die Ausführung am Haltepunkt angehalten wird, zeigen Sie auf eine beliebige Variable im aktuellen Geltungsbereich. Ein DataTip wird mit dem Namen und dem aktuellen Wert der Variablen angezeigt. Wenn Sie direkt im Editor-Fenster mit dem Mauszeiger auf einen Funktionsparameter oder eine Variable zeigen, können Sie den jeweiligen Wert ebenfalls sehen.
Aufrufliste
Jedes Mal, wenn das Programm eine Funktion eingibt, wird der Aufrufliste ein Eintrag hinzugefügt. Wenn Ihre Anwendung an Komplexität zunimmt und Funktionen mehrmals innerhalb von anderen Funktionen aufgerufen werden, können Sie den Verlauf der Funktionsaufrufe in der Aufrufliste einsehen.
Es ist nützlich, die Quelle einer Ausnahme zu finden. Wenn Ihr Programm unerwartet abstürzt, wird in der Konsole häufig eine Meldung ähnlich dem folgenden Beispiel angezeigt:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9
Die mit at [...] beginnenden Zeilen unterhalb der Fehlermeldung werden als Stapelüberwachung bezeichnet. In der Stapelüberwachung ist der Name und der Ursprung jeder Funktion aufgeführt, die aufgerufen wurde, bevor die Ausnahme auftrat. Es kann jedoch etwas schwierig sein, diese zu entschlüsseln, da auch interne Funktionen aus der .NET-Runtime enthalten sind.
An dieser Stelle erweist sich das Visual Studio-Fenster Aufrufliste als hilfreich. Es filtert unerwünschte Informationen heraus, um Ihnen standardmäßig nur die relevanten Funktionen aus Ihrem eigenen Code anzuzeigen. Anschließend können Sie diesen Aufrufstapel abwickeln, um herauszufinden, wo die Ausnahme stammt.
In der nächsten Lektion werden Sie durch eine Übung geführt, die den Debugger verwendet, um den Fehler im Fibonacci-Code zu beheben, den wir zuvor gesehen haben.
Angeben von Debuggereinstellungen
In Visual Studio können Sie verschiedene Einstellungen für das Debuggerverhalten angeben. Sie können z. B. festlegen, wie Variablen angezeigt werden sollen, ob bestimmte Warnungen ausgegeben werden, wie Haltepunkte festgelegt werden und welchen Einfluss Unterbrechungen auf gegenwärtig ausgeführte Programme haben. Sie können Ihr Projekt auch so konfigurieren, dass es als Debug- oder Releasekonfiguration erstellt wird.
Um Ihre Debuggereinstellungen zu konfigurieren, verwenden Sie das Menü Extras>Optionen>Debuggen, das Ihnen verschiedene Kategorien von Optionen bietet. Die am häufigsten verwendeten Optionen finden Sie in der Kategorie Allgemein.