Lernprogramm: Debuggen einer .NET-Konsolenanwendung mit Visual Studio
In diesem Lernprogramm werden die in Visual Studio verfügbaren Debugtools vorgestellt.
Wichtig
Alle Tastenkombinationen basieren auf den Standardwerten von Visual Studio. Ihre Tastenkombinationen können variieren, weitere Informationen finden Sie unter Tastenkombinationen in Visual Studio.
Voraussetzungen
- Dieses Tutorial kann mit der Konsolen-App durchgeführt werden, die Sie in Tutorial: Erstellen einer .NET-Konsolenanwendung mit Visual Studio erstellen.
Verwenden der Debugbuildkonfiguration
Debug und Release sind die integrierten Build-Konfigurationen von Visual Studio. Sie verwenden die Debugbuildkonfiguration zum Debuggen und die Releasekonfiguration für die endgültige Releaseverteilung.
In der Debugkonfiguration kompiliert ein Programm mit vollständigen symbolischen Debuginformationen und ohne Optimierung. Die Optimierung erschwert das Debuggen, da die Beziehung zwischen Quellcode und generierten Anweisungen komplexer ist. Die Releasekonfiguration eines Programms enthält keine symbolischen Debuginformationen und ist vollständig optimiert.
Standardmäßig verwendet Visual Studio die Debugbuildkonfiguration, sodass Sie sie vor dem Debuggen nicht ändern müssen.
Starten Sie Visual Studio.
Öffnen Sie das Projekt, das Sie in Erstellen einer .NET-Konsolenanwendung mit Visual Studioerstellt haben.
Die aktuelle Buildkonfiguration wird auf der Symbolleiste angezeigt. Die folgende Symbolleistenbild zeigt, dass Visual Studio so konfiguriert ist, dass die Debugversion der App kompiliert wird:
Haltepunkt setzen
Ein Haltepunkt unterbricht vorübergehend die Ausführung der Anwendung, bevor die Zeile mit dem Haltepunkt ausgeführt wird.
Legen Sie einen Haltepunkt in der Zeile fest, in der der Name, das Datum und die Uhrzeit angezeigt werden, indem Sie in der betreffenden Zeile auf den linken Rand des Codefensters klicken. Der linke Rand befindet sich links von den Zeilennummern. Andere Möglichkeiten, einen Haltepunkt festzulegen, bestehen darin, den Cursor in der Zeile des Codes zu platzieren und dann F9 zu drücken oder Debuggen>Haltepunkt umschalten in der Menüleiste zu wählen.
Wie in der folgenden Abbildung gezeigt, hebt Visual Studio die Zeile hervor, in der der Breakpoint festgelegt ist, und zeigt am linken Rand einen roten Punkt an.
Drücken Sie F5-, um das Programm im Debugmodus auszuführen. Eine weitere Möglichkeit, das Debuggen zu starten, besteht darin, im Menü Debug>Start Debugging zu wählen.
Geben Sie eine Zeichenfolge im Konsolenfenster ein, wenn das Programm Sie zur Eingabe eines Namens auffordert, und drücken Sie dann die EINGABETASTE.
Die Programmausführung wird beendet, wenn sie den Haltepunkt erreicht, und bevor die
Console.WriteLine
-Methode ausgeführt wird. Im Fenster Locals werden die Werte von Variablen angezeigt, die in der derzeit ausgeführten Methode definiert sind.
Verwenden des Fensters „Direkt“
Das Direktfenster dient Ihrer Interaktion mit der Anwendung, die Sie debuggen. Sie können den Wert von Variablen interaktiv ändern, um zu sehen, wie sich dies auf Ihr Programm auswirkt.
Wenn das Fenster Immediate nicht sichtbar ist, zeigen Sie es an, indem Sie Debug>Windows>Immediate wählen.
Geben Sie
name = "Gracie"
im Direktfenster ein, und drücken Sie die EINGABETASTE.Geben Sie
currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()
im Direktfenster ein, und drücken Sie die EINGABETASTE.Im Direktfenster werden der Wert der Zeichenfolgenvariablen und die Eigenschaften des DateTime-Werts angezeigt. Darüber hinaus werden die Werte der Variablen im Fenster Locals aktualisiert.
Drücken Sie F5-, um die Programmausführung fortzusetzen. Eine weitere Möglichkeit, fortzufahren, besteht darin, Debuggen>Fortsetzen aus dem Menü auszuwählen.
Die im Konsolenfenster angezeigten Werte entsprechen auch den Änderungen im Direktfenster.
Drücken Sie eine beliebige Taste, um die Anwendung zu beenden und das Debuggen zu beenden.
Festlegen eines bedingten Breakpoints
Das Programm zeigt die Zeichenfolge an, die der Benutzer eingibt. Was geschieht, wenn der Benutzer nichts eingibt? Sie können dies mit einem nützlichen Debugfeature testen, das als Bedingter Breakpoint bezeichnet wird.
Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Haltepunkt darstellt. Wählen Sie im Kontextmenü Bedingungen zum Öffnen des Dialogfelds Breakpointeinstellungen aus. Aktivieren Sie das Kontrollkästchen für Bedingungen, wenn es nicht bereits aktiviert ist.
Geben Sie als Bedingten Ausdruck den folgenden Code in das Feld ein, der Beispielcode zeigt, der testet, ob
x
den Wert 5 aufweist.string.IsNullOrEmpty(name)
String.IsNullOrEmpty(name)
Jedes Mal, wenn der Breakpoint erreicht wird, ruft der Debugger die
String.IsNullOrEmpty(name)
-Methode auf, und die Ausführung wird nur in dieser Zeile unterbrochen, wenn der Methodenaufruftrue
zurückgibt.Anstelle eines bedingten Ausdrucks können Sie eine Trefferanzahl angeben, wodurch die Ausführung des Programms unterbrochen wird, bevor eine Anweisung mit der angegebenen Häufigkeit ausgeführt wird. Eine weitere Option besteht darin, eine Filterbedingunganzugeben, die die Programmausführung auf der Grundlage von Attributen wie Threadbezeichner, Prozessname oder Threadname unterbricht.
Klicken Sie auf Schließen, um das Dialogfeld zu schließen.
Starten Sie das Programm mit dem Debuggen, indem Sie F5-drücken.
Drücken Sie im Konsolenfenster die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.
Da die angegebene Bedingung erfüllt wurde (
name
ist entwedernull
oder String.Empty), endet die Ausführung des Programms, wenn sie den Breakpoint erreicht, und bevor dieConsole.WriteLine
-Methode ausgeführt wird.Wählen Sie das Fenster Lokal aus, das die Werte der lokalen Variablen der aktuell ausgeführten Methode anzeigt. In diesem Fall ist
Main
die derzeit ausgeführte Methode. Beachten Sie, dass der Wert dername
Variablen""
oder String.Emptyist.Bestätigen Sie, dass der Wert eine leere Zeichenfolge ist, indem Sie die folgende Anweisung im Direktfenster eingeben und dann die EINGABETASTE drücken. Das Ergebnis ist
true
.? name == String.Empty
? String.IsNullOrEmpty(name)
Das Fragezeichen weist das Direktfenster an, einen Ausdruck auszuwerten.
Drücken Sie F5-, um die Programmausführung fortzusetzen.
Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.
Löschen Sie den Breakpoint durch Klicken auf den Punkt am linken Rand des Codefensters. Andere Möglichkeiten zum Löschen eines Haltepunkts bestehen darin, F9 zu drücken oder Debuggen > Haltepunkt umschalten auszuwählen, während die Codezeile markiert ist.
Schrittweises Ausführen eines Programms
Visual Studio ermöglicht Ihnen auch, Schritt für Schritt durch ein Programm zu gehen und dessen Ausführung zu überwachen. Normalerweise würden Sie einen Breakpoint festlegen und den Programmablauf in einem kleinen Teil des Programmcodes verfolgen. Da dieses Programm klein ist, können Sie das gesamte Programm durchlaufen.
Wählen Sie Debug>Step Into. Eine andere Möglichkeit zum Debuggen jeweils einer Anweisung besteht darin, F11 zu drücken.
Visual Studio markiert einen Pfeil neben der nächsten Zeile der Ausführung und zeigt diesen an.
C#
Visual Basic
An diesem Punkt zeigt das fenster Locals an, dass das
args
Array leer ist undname
undcurrentDate
Standardwerte aufweisen. Darüber hinaus hat Visual Studio ein leeres Konsolenfenster geöffnet.Drücken Sie F11. Visual Studio hebt nun die nächste auszuführende Zeile hervor. Das Fenster Locals ist unverändert, und das Konsolenfenster bleibt leer.
C#
Visual Basic
Drücken Sie F11. Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen
name
enthält. Das Fenster Lokal zeigt, dassname
den Wertnull
aufweist, und das Konsolenfenster zeigt die Zeichenfolge „What is your name?“ an.Reagieren Sie auf die Eingabeaufforderung, indem Sie eine Zeichenfolge in das Konsolenfenster eingeben und die EINGABETASTE drücken. Die Konsole reagiert nicht, und die eingegebene Zeichenfolge wird nicht im Konsolenfenster angezeigt, aber die Console.ReadLine Methode erfasst trotzdem Ihre Eingabe.
Drücken Sie F11. Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen
currentDate
enthält. Das Fenster Lokale Variablen zeigt den vom Aufruf der Methode Console.ReadLine zurückgegebenen Wert an. Im Konsolenfenster wird auch die Zeichenfolge angezeigt, die Sie an der Eingabeaufforderung eingegeben haben.Drücken Sie F11. Das Fenster Lokal zeigt den Wert der Variablen
currentDate
nach der Zuweisung aus der DateTime.Now-Eigenschaft an. Das Konsolenfenster ist unverändert.Drücken Sie F11. Visual Studio ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.
Wählen Sie Debug>Step Out. Eine andere Möglichkeit, die schrittweise Ausführung zu stoppen, besteht darin, UMSCHALT+F11 zu drücken.
Das Konsolenfenster zeigt eine Meldung an und wartet, bis Sie eine Taste drücken.
Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.
Verwenden der Releasebuildkonfiguration
Nachdem Sie die Debugversion Ihrer Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die Releaseversion enthält Compileroptimierungen, die sich manchmal negativ auf das Verhalten einer Anwendung auswirken können. Compileroptimierungen, die zur Verbesserung der Leistung entwickelt wurden, können z. B. Racebedingungen in Multithreadanwendungen erstellen.
Um die Releaseversion Ihrer Konsolenanwendung zu erstellen und zu testen, ändern Sie die Buildkonfiguration auf der Symbolleiste von Debug- in Release-.
Wenn Sie F5 drücken oder Projektmappe erstellen im Menü Build auswählen, kompiliert Visual Studio die Releaseversion der Anwendung. Sie können sie dann wie die Debugversion testen.
Nächste Schritte
In diesem Tutorial haben Sie die Debugging-Tools von Visual Studio verwendet. Im nächsten Tutorial veröffentlichen Sie eine einsatzbereite Version der App.