Tutorial: Debuggen einer .NET-Konsolenanwendung mit Visual Studio

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio verfügbar sind.

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

Verwenden der Debugbuildkonfiguration

Debug und Release sind zwei Standardbuildkonfigurationen von Visual Studio. Sie verwenden die Debugbuildkonfiguration zum Debuggen und die Releasekonfiguration für die endgültige Releaseverteilung.

In der Debugkonfiguration wird ein Programm mit vollständigen symbolischen Debuginformationen und ohne Optimierung kompiliert. Die Optimierung gestaltet das Debuggen etwas schwieriger, da die Beziehung zwischen Quellcode und generierten Anweisungen komplexer ist. Die Releasekonfiguration eines Programms verfügt über keine symbolischen Debuginformationen und wird vollständig optimiert.

Standardmäßig verwendet Visual Studio die Debugbuildkonfiguration, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio.

  2. Öffnen Sie das Projekt, das Sie in Tutorial: Erstellen einer .NET Core-Konsolenanwendung mit Visual Studio erstellt haben.

    Die aktuelle Buildkonfiguration wird auf der Symbolleiste angezeigt. Das folgende Symbolleistenbild zeigt, dass Visual Studio konfiguriert wurde, um die Debugversion Ihrer Anwendung zu kompilieren:

    Visual Studio toolbar with debug highlighted

Haltepunkt festlegen

Ein Haltepunkt unterbricht vorübergehend die Ausführung der Anwendung, bevor die Zeile mit dem Haltepunkt ausgeführt wird.

  1. 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. Sie können einen Breakpoint auch festlegen, indem Sie den Cursor in der Codezeile platzieren und dann F9 drücken oder Debuggen>Haltepunkt umschalten in der Menüleiste auswä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.

    Visual Studio Program window with breakpoint set

  2. Drücken Sie F5, um das Programm im Debugmodus auszuführen. Eine andere Möglichkeit, das Debuggen zu starten, besteht darin, im Menü Debuggen>Debuggen starten zu wählen.

  3. Geben Sie eine Zeichenfolge im Konsolenfenster ein, wenn das Programm Sie zur Eingabe eines Namens auffordert, und drücken Sie dann die EINGABETASTE.

  4. Die Ausführung des Programms endet, wenn sie den Haltepunkt erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Fenster Lokal werden die Werte von Variablen angezeigt, die in der gerade ausgeführten Methode definiert sind.

    Screenshot of a breakpoint in Visual Studio

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.

  1. Wenn das Direktfenster nicht angezeigt wird, zeigen Sie es durch Auswählen von Debuggen>Fenster>Direkt an.

  2. Geben Sie name = "Gracie" im Direktfenster ein, und drücken Sie die EINGABETASTE.

  3. 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 Lokal aktualisiert.

    Locals and Immediate Windows in Visual Studio 2019

  4. Drücken Sie F5, um die Ausführung des Programms fortzusetzen. Eine weitere Möglichkeit zum Fortsetzen besteht darin, im Menü Debuggen>Fortsetzen zu wählen.

    Die im Konsolenfenster angezeigten Werte entsprechen auch den Änderungen im Direktfenster.

    Console window showing the entered values

  5. Drücken Sie eine beliebige Taste, um die Anwendung und das Debuggen zu beenden.

Festlegen eines bedingten Breakpoints

Das Programm zeigt die Zeichenfolge an, die der Benutzer eingibt. Aber was geschieht, wenn der Benutzer gar nichts eingibt? Sie können dies mit einem nützlichen Debugfeature testen, das als Bedingter Breakpoint bezeichnet wird.

  1. 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.

    Editor showing breakpoint settings panel - C#

  2. 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 Methodenaufruf true 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 ist das Angeben einer Filterbedingung, wodurch die Ausführung des Programms auf Basis von Attributen wie Threadbezeichner, Prozessname oder Threadname unterbrochen wird.

  3. Klicken Sie auf Schließen, um das Dialogfeld zu schließen.

  4. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  5. Drücken Sie im Konsolenfenster die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

  6. Da die angegebene Bedingung erfüllt wurde (name ist entweder null oder String.Empty), endet die Ausführung des Programms, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird.

  7. 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. Stellen Sie sicher, dass der Wert der Variablen name"" bzw. String.Empty ist.

  8. 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.

    Immediate Window returning a value of true after the statement is executed - C#

  9. Drücken Sie F5, um die Ausführung des Programms fortzusetzen.

  10. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

  11. 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

Mit Visual Studio können Sie ein Programm auch zeilenweise durchlaufen und die Ausführung jeder einzelnen Zeile ü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 schrittweise durchlaufen.

  1. Wählen Sie Debuggen>Einzelschritt aus. 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 Studio step into method - C#

    Visual Basic

    Visual Studio step into method - Visual Basic

    An diesem Punkt wird im Fenster Lokal angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen. Darüber hinaus hat Visual Studio ein leeres Konsolenfenster geöffnet.

  2. Drücken Sie die Taste F11. Visual Studio hebt nun die nächste auszuführende Zeile hervor. Das Fenster Lokal ist unverändert, und das Konsolenfenster bleibt leer.

    C#

    Visual Studio step in method source - C#

    Visual Basic

    Visual Studio step into method source - Visual Basic

  3. Drücken Sie die Taste F11. Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen name enthält. Das Fenster Lokal zeigt, dass name den Wert null aufweist, und das Konsolenfenster zeigt die Zeichenfolge „What is your name?“ an.

  4. 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 wird dennoch Ihre Eingabe erfassen.

  5. Drücken Sie die Taste 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.

  6. Drücken Sie die Taste F11. Das Fenster Lokal zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an. Das Konsolenfenster ist unverändert.

  7. Drücken Sie die Taste F11. Visual Studio ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  8. Wählen Sie Debuggen>Ausführen bis Rücksprung aus. Eine weitere Möglichkeit, die schrittweise Ausführung zu beenden, besteht darin, UMSCHALT+F11 zu drücken.

    Das Konsolenfenster zeigt eine Meldung an und wartet, bis Sie eine Taste drücken.

  9. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die endgültige Releaseversion umfasst Compileroptimierungen, die manchmal das Verhalten einer Anwendung negativ beeinträchtigen können. Compileroptimierungen, die zur Verbesserung der Leistung entwickelt wurden, können z. B. Racebedingungen in Multithreadanwendungen erstellen.

Ändern Sie zum Erstellen und Testen der endgültigen Produktversion der Konsolenanwendung die Buildkonfiguration auf der Symbolleiste von Debuggen in Freigabe.

default Visual Studio toolbar with release highlighted

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 Debugtools von Visual Studio verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio verfügbar sind.

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

Verwenden der Debugbuildkonfiguration

Debug und Release sind zwei Standardbuildkonfigurationen von Visual Studio. Sie verwenden die Debugbuildkonfiguration zum Debuggen und die Releasekonfiguration für die endgültige Releaseverteilung.

In der Debugkonfiguration wird ein Programm mit vollständigen symbolischen Debuginformationen und ohne Optimierung kompiliert. Die Optimierung gestaltet das Debuggen etwas schwieriger, da die Beziehung zwischen Quellcode und generierten Anweisungen komplexer ist. Die Releasekonfiguration eines Programms verfügt über keine symbolischen Debuginformationen und wird vollständig optimiert.

Standardmäßig verwendet Visual Studio die Debugbuildkonfiguration, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio.

  2. Öffnen Sie das Projekt, das Sie in Tutorial: Erstellen einer .NET Core-Konsolenanwendung mit Visual Studio erstellt haben.

    Die aktuelle Buildkonfiguration wird auf der Symbolleiste angezeigt. Das folgende Symbolleistenbild zeigt, dass Visual Studio konfiguriert wurde, um die Debugversion Ihrer Anwendung zu kompilieren:

    Visual Studio toolbar with debug highlighted

Haltepunkt festlegen

Ein Haltepunkt unterbricht vorübergehend die Ausführung der Anwendung, bevor die Zeile mit dem Haltepunkt ausgeführt wird.

  1. 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. Sie können einen Breakpoint auch festlegen, indem Sie den Cursor in der Codezeile platzieren und dann F9 drücken oder Debuggen>Haltepunkt umschalten in der Menüleiste auswä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.

    Visual Studio Program window with breakpoint set

  2. Drücken Sie F5, um das Programm im Debugmodus auszuführen. Eine andere Möglichkeit, das Debuggen zu starten, besteht darin, im Menü Debuggen>Debuggen starten zu wählen.

  3. Geben Sie eine Zeichenfolge im Konsolenfenster ein, wenn das Programm Sie zur Eingabe eines Namens auffordert, und drücken Sie dann die EINGABETASTE.

  4. Die Ausführung des Programms endet, wenn sie den Haltepunkt erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Fenster Lokal werden die Werte von Variablen angezeigt, die in der gerade ausgeführten Methode definiert sind.

    Screenshot of a breakpoint in Visual Studio

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.

  1. Wenn das Direktfenster nicht angezeigt wird, zeigen Sie es durch Auswählen von Debuggen>Fenster>Direkt an.

  2. Geben Sie name = "Gracie" im Direktfenster ein, und drücken Sie die EINGABETASTE.

  3. 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 Lokal aktualisiert.

    Locals and Immediate Windows in Visual Studio 2019

  4. Drücken Sie F5, um die Ausführung des Programms fortzusetzen. Eine weitere Möglichkeit zum Fortsetzen besteht darin, im Menü Debuggen>Fortsetzen zu wählen.

    Die im Konsolenfenster angezeigten Werte entsprechen auch den Änderungen im Direktfenster.

    Console window showing the entered values

  5. Drücken Sie eine beliebige Taste, um die Anwendung und das Debuggen zu beenden.

Festlegen eines bedingten Breakpoints

Das Programm zeigt die Zeichenfolge an, die der Benutzer eingibt. Aber was geschieht, wenn der Benutzer gar nichts eingibt? Sie können dies mit einem nützlichen Debugfeature testen, das als Bedingter Breakpoint bezeichnet wird.

  1. 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.

    Editor showing breakpoint settings panel - C#

  2. 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 Methodenaufruf true 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 ist das Angeben einer Filterbedingung, wodurch die Ausführung des Programms auf Basis von Attributen wie Threadbezeichner, Prozessname oder Threadname unterbrochen wird.

  3. Klicken Sie auf Schließen, um das Dialogfeld zu schließen.

  4. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  5. Drücken Sie im Konsolenfenster die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

  6. Da die angegebene Bedingung erfüllt wurde (name ist entweder null oder String.Empty), endet die Ausführung des Programms, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird.

  7. 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. Stellen Sie sicher, dass der Wert der Variablen name"" bzw. String.Empty ist.

  8. 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.

    Immediate Window returning a value of true after the statement is executed - C#

  9. Drücken Sie F5, um die Ausführung des Programms fortzusetzen.

  10. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

  11. 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

Mit Visual Studio können Sie ein Programm auch zeilenweise durchlaufen und die Ausführung jeder einzelnen Zeile ü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 schrittweise durchlaufen.

  1. Wählen Sie Debuggen>Einzelschritt aus. 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 Studio step into method - C#

    Visual Basic

    Visual Studio step into method - Visual Basic

    An diesem Punkt wird im Fenster Lokal angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen. Darüber hinaus hat Visual Studio ein leeres Konsolenfenster geöffnet.

  2. Drücken Sie die Taste F11. Visual Studio hebt nun die nächste auszuführende Zeile hervor. Das Fenster Lokal ist unverändert, und das Konsolenfenster bleibt leer.

    C#

    Visual Studio step in method source - C#

    Visual Basic

    Visual Studio step into method source - Visual Basic

  3. Drücken Sie die Taste F11. Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen name enthält. Das Fenster Lokal zeigt, dass name den Wert null aufweist, und das Konsolenfenster zeigt die Zeichenfolge „What is your name?“ an.

  4. 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 wird dennoch Ihre Eingabe erfassen.

  5. Drücken Sie die Taste 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.

  6. Drücken Sie die Taste F11. Das Fenster Lokal zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an. Das Konsolenfenster ist unverändert.

  7. Drücken Sie die Taste F11. Visual Studio ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  8. Wählen Sie Debuggen>Ausführen bis Rücksprung aus. Eine weitere Möglichkeit, die schrittweise Ausführung zu beenden, besteht darin, UMSCHALT+F11 zu drücken.

    Das Konsolenfenster zeigt eine Meldung an und wartet, bis Sie eine Taste drücken.

  9. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die endgültige Releaseversion umfasst Compileroptimierungen, die manchmal das Verhalten einer Anwendung negativ beeinträchtigen können. Compileroptimierungen, die zur Verbesserung der Leistung entwickelt wurden, können z. B. Racebedingungen in Multithreadanwendungen erstellen.

Ändern Sie zum Erstellen und Testen der endgültigen Produktversion der Konsolenanwendung die Buildkonfiguration auf der Symbolleiste von Debuggen in Freigabe.

default Visual Studio toolbar with release highlighted

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 Debugtools von Visual Studio verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio verfügbar sind.

Voraussetzungen

Verwenden der Debugbuildkonfiguration

Debug und Release sind zwei Standardbuildkonfigurationen von Visual Studio. Sie verwenden die Debugbuildkonfiguration zum Debuggen und die Releasekonfiguration für die endgültige Releaseverteilung.

In der Debugkonfiguration wird ein Programm mit vollständigen symbolischen Debuginformationen und ohne Optimierung kompiliert. Die Optimierung gestaltet das Debuggen etwas schwieriger, da die Beziehung zwischen Quellcode und generierten Anweisungen komplexer ist. Die Releasekonfiguration eines Programms verfügt über keine symbolischen Debuginformationen und wird vollständig optimiert.

Standardmäßig verwendet Visual Studio die Debugbuildkonfiguration, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio.

  2. Öffnen Sie das Projekt, das Sie in Tutorial: Erstellen einer .NET Core-Konsolenanwendung mit Visual Studio erstellt haben.

    Die aktuelle Buildkonfiguration wird auf der Symbolleiste angezeigt. Das folgende Symbolleistenbild zeigt, dass Visual Studio konfiguriert wurde, um die Debugversion Ihrer Anwendung zu kompilieren:

    Visual Studio toolbar with debug highlighted

Haltepunkt festlegen

Ein Haltepunkt unterbricht vorübergehend die Ausführung der Anwendung, bevor die Zeile mit dem Haltepunkt ausgeführt wird.

  1. 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. Sie können einen Breakpoint auch festlegen, indem Sie den Cursor in der Codezeile platzieren und dann F9 drücken oder Debuggen>Haltepunkt umschalten in der Menüleiste auswä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.

    Visual Studio Program window with breakpoint set

  2. Drücken Sie F5, um das Programm im Debugmodus auszuführen. Eine andere Möglichkeit, das Debuggen zu starten, besteht darin, im Menü Debuggen>Debuggen starten zu wählen.

  3. Geben Sie eine Zeichenfolge im Konsolenfenster ein, wenn das Programm Sie zur Eingabe eines Namens auffordert, und drücken Sie dann die EINGABETASTE.

  4. Die Ausführung des Programms endet, wenn sie den Haltepunkt erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Fenster Lokal werden die Werte von Variablen angezeigt, die in der gerade ausgeführten Methode definiert sind.

    Screenshot of a breakpoint in Visual Studio

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.

  1. Wenn das Direktfenster nicht angezeigt wird, zeigen Sie es durch Auswählen von Debuggen>Fenster>Direkt an.

  2. Geben Sie name = "Gracie" im Direktfenster ein, und drücken Sie die EINGABETASTE.

  3. 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 Lokal aktualisiert.

    Locals and Immediate Windows in Visual Studio 2019

  4. Drücken Sie F5, um die Ausführung des Programms fortzusetzen. Eine weitere Möglichkeit zum Fortsetzen besteht darin, im Menü Debuggen>Fortsetzen zu wählen.

    Die im Konsolenfenster angezeigten Werte entsprechen auch den Änderungen im Direktfenster.

    Console window showing the entered values

  5. Drücken Sie eine beliebige Taste, um die Anwendung und das Debuggen zu beenden.

Festlegen eines bedingten Breakpoints

Das Programm zeigt die Zeichenfolge an, die der Benutzer eingibt. Aber was geschieht, wenn der Benutzer gar nichts eingibt? Sie können dies mit einem nützlichen Debugfeature testen, das als Bedingter Breakpoint bezeichnet wird.

  1. 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.

    Editor showing breakpoint settings panel - C#

  2. 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 Methodenaufruf true 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 ist das Angeben einer Filterbedingung, wodurch die Ausführung des Programms auf Basis von Attributen wie Threadbezeichner, Prozessname oder Threadname unterbrochen wird.

  3. Klicken Sie auf Schließen, um das Dialogfeld zu schließen.

  4. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  5. Drücken Sie im Konsolenfenster die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

  6. Da die angegebene Bedingung erfüllt wurde (name ist entweder null oder String.Empty), endet die Ausführung des Programms, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird.

  7. 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. Stellen Sie sicher, dass der Wert der Variablen name"" bzw. String.Empty ist.

  8. 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.

    Immediate Window returning a value of true after the statement is executed - C#

  9. Drücken Sie F5, um die Ausführung des Programms fortzusetzen.

  10. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

  11. 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

Mit Visual Studio können Sie ein Programm auch zeilenweise durchlaufen und die Ausführung jeder einzelnen Zeile ü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 schrittweise durchlaufen. Obwohl derzeit kein Debuggen erfolgt, hat Visual Studio den Fokus:

  1. Wählen Sie Debuggen>Einzelschritt aus. 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 Studio step into method - C#

    Visual Basic

    Visual Studio step into method - Visual Basic

    An diesem Punkt wird im Fenster Lokal angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen. Darüber hinaus hat Visual Studio ein leeres Konsolenfenster geöffnet.

  2. Drücken Sie die Taste F11. Visual Studio hebt nun die nächste auszuführende Zeile hervor. Das Fenster Lokal ist unverändert, und das Konsolenfenster bleibt leer.

    C#

    Visual Studio step in method source - C#

    Visual Basic

    Visual Studio step into method source - Visual Basic

  3. Drücken Sie die Taste F11. Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen name enthält. Das Fenster Lokal zeigt, dass name den Wert null aufweist, und das Konsolenfenster zeigt die Zeichenfolge „What is your name?“ an.

  4. 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 wird dennoch Ihre Eingabe erfassen.

  5. Drücken Sie die Taste 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.

  6. Drücken Sie die Taste F11. Das Fenster Lokal zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an. Das Konsolenfenster ist unverändert.

  7. Drücken Sie die Taste F11. Visual Studio ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  8. Wählen Sie Debuggen>Ausführen bis Rücksprung aus. Eine weitere Möglichkeit, die schrittweise Ausführung zu beenden, besteht darin, UMSCHALT+F11 zu drücken.

    Das Konsolenfenster zeigt eine Meldung an und wartet, bis Sie eine Taste drücken.

  9. Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen und das Debuggen zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die endgültige Releaseversion umfasst Compileroptimierungen, die manchmal das Verhalten einer Anwendung negativ beeinträchtigen können. Compileroptimierungen, die zur Verbesserung der Leistung entwickelt wurden, können z. B. Racebedingungen in Multithreadanwendungen erstellen.

Ändern Sie zum Erstellen und Testen der endgültigen Produktversion der Konsolenanwendung die Buildkonfiguration auf der Symbolleiste von Debuggen in Freigabe.

default Visual Studio toolbar with release highlighted

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 Debugtools von Visual Studio verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.