Tutorial: Debuggen einer .NET-Konsolenanwendung mit Visual Studio Code

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio Code zum Arbeiten mit .NET-Apps verfügbar sind.

Voraussetzungen

Verwenden der Debugbuildkonfiguration

Debug und Release sind in .NET integrierte Buildkonfigurationen. 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 wird in den Visual Studio Code-Starteinstellungen die Debugbuildkonfiguration verwendet, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio Code.

  2. Öffnen Sie den Ordner des Projekts, das Sie in Tutorial: Erstellen einer .NET-Konsolenanwendung mit Visual Studio Code erstellt haben.

Haltepunkt festlegen

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

  1. Öffnen Sie die Datei Program.cs.

  2. Legen Sie einen Breakpoint in der Zeile fest, in der der Name, das Datum und die Uhrzeit angezeigt werden, indem Sie auf den linken Rand des Codefensters klicken. Der linke Rand befindet sich links von den Zeilennummern. Andere Möglichkeiten zum Festlegen eines Breakpoints bestehen darin, F9 zu drücken oder Ausführen>Haltepunkt umschalten aus dem Menü auszuwählen, während die Codezeile ausgewählt ist.

    Visual Studio Code gibt die Zeile an, in der der Haltepunkt festgelegt ist, indem ein roter Punkt am linken Rand angezeigt wird.

    Breakpoint set

Einrichtung für Terminaleingabe

Der Breakpoint befindet sich hinter einem Console.ReadLine-Methodenaufruf. Die Debugkonsole akzeptiert keine Terminaleingaben für ein aktuell ausgeführtes Programm. Zum Verarbeiten von Terminaleingaben beim Debuggen können Sie das integrierte Terminal (eines der Visual Studio Code-Fenster) oder ein externes Terminal verwenden. In diesem Tutorial verwenden Sie das integrierte Terminal.

  1. Der Projektordner enthält einen Ordner namens .vscode. Öffnen Sie die Datei launch.json, die sich im Ordner .vscode befindet.

  2. Ändern Sie in launch.json die Einstellung console von internalConsole in integratedTerminal:

    "console": "integratedTerminal",
    
  3. Speichern Sie die Änderungen.

Debugging starten

  1. Öffnen Sie die Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen.

    Open the Debug tab in Visual Studio Code

  2. Wählen Sie den grünen Pfeil am oberen Rand des Bereichs neben .NET Core starten (Konsole) aus. Andere Möglichkeiten zum Starten des Programms im Debugmodus besteht darin, F5 zu drücken oder Ausführen>Debuggen starten aus dem Menü auszuwählen.

    Start debugging

  3. Wählen Sie die Registerkarte Terminal aus, um die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) anzuzeigen, die das Programm vor dem Warten auf eine Antwort anzeigt.

    Select the Terminal tab

  4. Geben Sie eine Zeichenfolge im Fenster Terminal als Antwort auf die Aufforderung zur Eingabe eines Namens ein, und drücken Sie dann die EINGABETASTE.

    Die Ausführung des Programms wird beendet, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Abschnitt Lokal des Fensters Variablen werden die Werte von Variablen angezeigt, die in der aktuell ausgeführten Methode definiert sind.

    Breakpoint hit, showing Locals

Verwenden der Debugging-Konsole

Das Fenster Debugging-Konsole dient Ihrer Interaktion mit der Anwendung, die Sie debuggen. Sie können den Wert von Variablen ändern, um zu sehen, wie sich dies auf Ihr Programm auswirkt.

  1. Wählen Sie die Registerkarte Debugging-Konsole aus.

  2. Geben Sie name = "Gracie" an der Eingabeaufforderung am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Change variable values

  3. Geben Sie currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime() am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Im Fenster Variablen werden die neuen Werte der Variablen name und currentDate angezeigt.

  4. Setzen Sie die Ausführung des Programms durch Auswählen der Schaltfläche Fortsetzen in der Symbolleiste fort. Eine weitere Möglichkeit zum Fortsetzen besteht darin, F5 zu drücken.

    Continue debugging

  5. Klicken Sie erneut auf die Registerkarte Terminal.

    Die im Konsolenfenster angezeigten Werte entsprechen den Änderungen im Fenster Debugging-Konsole.

    Terminal showing the entered values

  6. 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 (Klicken bei gedrückter CTRL-TASTE unter macOS) auf den roten Punkt, der den Breakpoint darstellt. Wählen Sie im Kontextmenü Breakpoint bearbeiten aus, um ein Dialogfeld zu öffnen, in dem Sie einen bedingten Ausdruck eingeben können.

    Breakpoint context menu

  2. Wählen Sie in der Dropdownliste Expression aus, geben Sie den folgenden bedingten Ausdruck ein, und drücken Sie die EINGABETASTE.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    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. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  4. Drücken Sie auf der Registerkarte Terminal die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

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

    Im Fenster Variablen wird angezeigt, dass der Wert der name-Variablen "" oder String.Empty ist.

  5. Bestätigen Sie, dass der Wert eine leere Zeichenfolge ist, indem Sie die folgende Anweisung an der Eingabeaufforderung Debugging-Konsole eingeben und dann die EINGABETASTE drücken. Das Ergebnis ist true.

    name == String.Empty
    
  6. Wählen Sie die Schaltfläche Fortfahren auf der Symbolleiste, um die Ausführung des Programms fortzusetzen.

  7. Wählen Sie die Registerkarte Terminal aus, und drücken Sie eine beliebige Taste, um das Programm und das Debuggen zu beenden.

  8. 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 bei markierter Codezeile im Menü Ausführen > Haltepunkt umschalten auszuwählen.

  9. Wenn Sie eine Warnung erhalten, dass die Breakpointbedingung verloren geht, wählen Sie Breakpoint entfernen aus.

Schrittweises Ausführen eines Programms

Mit Visual Studio Code können Sie ein Programm auch zeilenweise durchlaufen und seine Ausführung ü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. Legen Sie einen Breakpoint bei der öffnenden geschweiften Klammer der Main-Methode fest.

  2. Drücken Sie die Taste F5 , um mit dem Debuggen zu beginnen.

    Visual Studio Code hebt die Breakpointzeile hervor.

    An diesem Punkt wird im Fenster Variablen angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen.

  3. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Step-Into button

    Visual Studio Code hebt die nächste Zeile hervor.

  4. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code führt die Console.WriteLine für die Aufforderung zur Eingabe des Namens aus und hebt die nächste Ausführungszeile hervor. Die nächste Zeile ist die Console.ReadLine für den name. Das Fenster Variablen ist unverändert, und auf der Registerkarte Terminal wird die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) angezeigt.

  5. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio hebt die Variablenzuweisung name hervor. Im Fenster Variablen wird angezeigt, dass name noch immer nullist.

  6. Reagieren Sie auf die Eingabeaufforderung, indem Sie eine Zeichenfolge auf der Registerkarte „Terminal“ eingeben und die EINGABETASTE drücken.

    Auf der Registerkarte Terminal wird die Zeichenfolge während der Eingabe möglicherweise nicht angezeigt, aber die Console.ReadLine-Methode erfasst Ihre Eingabe.

  7. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code hebt die Variablenzuweisung currentDate hervor. Das Fenster Variablen zeigt den vom Aufruf der Methode Console.ReadLine zurückgegebenen Wert an. Auf der Registerkarte Terminal wird die Zeichenfolge angezeigt, die Sie an der Eingabeaufforderung eingegeben haben.

  8. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Das Fenster Variablen zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an.

  9. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  10. Wählen Sie Ausführen>Ausführen bis Rücksprung aus, oder drücken Sie UMSCHALT+F11.

    Step-Out button

  11. Wählen Sie die Registerkarte Terminal aus.

    Das Terminal zeigt „Drücken Sie zum Beenden eine beliebige Taste“ an.

  12. Drücken Sie eine beliebige Taste, um das Programm zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die Releaseversion umfasst Compileroptimierungen, die das Verhalten einer Anwendung beeinträchtigen 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, öffnen Sie das Terminal und führen den folgenden Befehl aus:

dotnet run --configuration Release

Zusätzliche Ressourcen

Nächste Schritte

In diesem Tutorial haben Sie Debugtools von Visual Studio Code verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio Code zum Arbeiten mit .NET-Apps verfügbar sind.

Voraussetzungen

Verwenden der Debugbuildkonfiguration

Debug und Release sind in .NET integrierte Buildkonfigurationen. 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 wird in den Visual Studio Code-Starteinstellungen die Debugbuildkonfiguration verwendet, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio Code.

  2. Öffnen Sie den Ordner des Projekts, das Sie in Tutorial: Erstellen einer .NET-Konsolenanwendung mit Visual Studio Code erstellt haben.

Haltepunkt festlegen

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

  1. Öffnen Sie die Datei Program.cs.

  2. Legen Sie einen Breakpoint in der Zeile fest, in der der Name, das Datum und die Uhrzeit angezeigt werden, indem Sie auf den linken Rand des Codefensters klicken. Der linke Rand befindet sich links von den Zeilennummern. Andere Möglichkeiten zum Festlegen eines Breakpoints bestehen darin, F9 zu drücken oder Ausführen>Haltepunkt umschalten aus dem Menü auszuwählen, während die Codezeile ausgewählt ist.

    Visual Studio Code gibt die Zeile an, in der der Haltepunkt festgelegt ist, indem ein roter Punkt am linken Rand angezeigt wird.

    Breakpoint set

Einrichtung für Terminaleingabe

Der Breakpoint befindet sich hinter einem Console.ReadLine-Methodenaufruf. Die Debugkonsole akzeptiert keine Terminaleingaben für ein aktuell ausgeführtes Programm. Zum Verarbeiten von Terminaleingaben beim Debuggen können Sie das integrierte Terminal (eines der Visual Studio Code-Fenster) oder ein externes Terminal verwenden. In diesem Tutorial verwenden Sie das integrierte Terminal.

  1. Der Projektordner enthält einen Ordner namens .vscode. Öffnen Sie die Datei launch.json, die sich im Ordner .vscode befindet.

  2. Ändern Sie in launch.json die Einstellung console von internalConsole in integratedTerminal:

    "console": "integratedTerminal",
    
  3. Speichern Sie die Änderungen.

Debugging starten

  1. Öffnen Sie die Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen.

    Open the Debug tab in Visual Studio Code

  2. Wählen Sie den grünen Pfeil am oberen Rand des Bereichs neben .NET Core starten (Konsole) aus. Andere Möglichkeiten zum Starten des Programms im Debugmodus besteht darin, F5 zu drücken oder Ausführen>Debuggen starten aus dem Menü auszuwählen.

    Start debugging

  3. Wählen Sie die Registerkarte Terminal aus, um die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) anzuzeigen, die das Programm vor dem Warten auf eine Antwort anzeigt.

    Select the Terminal tab

  4. Geben Sie eine Zeichenfolge im Fenster Terminal als Antwort auf die Aufforderung zur Eingabe eines Namens ein, und drücken Sie dann die EINGABETASTE.

    Die Ausführung des Programms wird beendet, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Abschnitt Lokal des Fensters Variablen werden die Werte von Variablen angezeigt, die in der aktuell ausgeführten Methode definiert sind.

    Breakpoint hit, showing Locals

Verwenden der Debugging-Konsole

Das Fenster Debugging-Konsole dient Ihrer Interaktion mit der Anwendung, die Sie debuggen. Sie können den Wert von Variablen ändern, um zu sehen, wie sich dies auf Ihr Programm auswirkt.

  1. Wählen Sie die Registerkarte Debugging-Konsole aus.

  2. Geben Sie name = "Gracie" an der Eingabeaufforderung am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Change variable values

  3. Geben Sie currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime() am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Im Fenster Variablen werden die neuen Werte der Variablen name und currentDate angezeigt.

  4. Setzen Sie die Ausführung des Programms durch Auswählen der Schaltfläche Fortsetzen in der Symbolleiste fort. Eine weitere Möglichkeit zum Fortsetzen besteht darin, F5 zu drücken.

    Continue debugging

  5. Klicken Sie erneut auf die Registerkarte Terminal.

    Die im Konsolenfenster angezeigten Werte entsprechen den Änderungen im Fenster Debugging-Konsole.

    Terminal showing the entered values

  6. 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 (Klicken bei gedrückter CTRL-TASTE unter macOS) auf den roten Punkt, der den Breakpoint darstellt. Wählen Sie im Kontextmenü Breakpoint bearbeiten aus, um ein Dialogfeld zu öffnen, in dem Sie einen bedingten Ausdruck eingeben können.

    Breakpoint context menu

  2. Wählen Sie in der Dropdownliste Expression aus, geben Sie den folgenden bedingten Ausdruck ein, und drücken Sie die EINGABETASTE.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    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. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  4. Drücken Sie auf der Registerkarte Terminal die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

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

    Im Fenster Variablen wird angezeigt, dass der Wert der name-Variablen "" oder String.Empty ist.

  5. Bestätigen Sie, dass der Wert eine leere Zeichenfolge ist, indem Sie die folgende Anweisung an der Eingabeaufforderung Debugging-Konsole eingeben und dann die EINGABETASTE drücken. Das Ergebnis ist true.

    name == String.Empty
    
  6. Wählen Sie die Schaltfläche Fortfahren auf der Symbolleiste, um die Ausführung des Programms fortzusetzen.

  7. Wählen Sie die Registerkarte Terminal aus, und drücken Sie eine beliebige Taste, um das Programm und das Debuggen zu beenden.

  8. 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 bei markierter Codezeile im Menü Ausführen > Haltepunkt umschalten auszuwählen.

  9. Wenn Sie eine Warnung erhalten, dass die Breakpointbedingung verloren geht, wählen Sie Breakpoint entfernen aus.

Schrittweises Ausführen eines Programms

Mit Visual Studio Code können Sie ein Programm auch zeilenweise durchlaufen und seine Ausführung ü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. Legen Sie einen Breakpoint bei der öffnenden geschweiften Klammer der Main-Methode fest.

  2. Drücken Sie die Taste F5 , um mit dem Debuggen zu beginnen.

    Visual Studio Code hebt die Breakpointzeile hervor.

    An diesem Punkt wird im Fenster Variablen angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen.

  3. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Step-Into button

    Visual Studio Code hebt die nächste Zeile hervor.

  4. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code führt die Console.WriteLine für die Aufforderung zur Eingabe des Namens aus und hebt die nächste Ausführungszeile hervor. Die nächste Zeile ist die Console.ReadLine für den name. Das Fenster Variablen ist unverändert, und auf der Registerkarte Terminal wird die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) angezeigt.

  5. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio hebt die Variablenzuweisung name hervor. Im Fenster Variablen wird angezeigt, dass name noch immer nullist.

  6. Reagieren Sie auf die Eingabeaufforderung, indem Sie eine Zeichenfolge auf der Registerkarte „Terminal“ eingeben und die EINGABETASTE drücken.

    Auf der Registerkarte Terminal wird die Zeichenfolge während der Eingabe möglicherweise nicht angezeigt, aber die Console.ReadLine-Methode erfasst Ihre Eingabe.

  7. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code hebt die Variablenzuweisung currentDate hervor. Das Fenster Variablen zeigt den vom Aufruf der Methode Console.ReadLine zurückgegebenen Wert an. Auf der Registerkarte Terminal wird die Zeichenfolge angezeigt, die Sie an der Eingabeaufforderung eingegeben haben.

  8. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Das Fenster Variablen zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an.

  9. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  10. Wählen Sie Ausführen>Ausführen bis Rücksprung aus, oder drücken Sie UMSCHALT+F11.

    Step-Out button

  11. Wählen Sie die Registerkarte Terminal aus.

    Das Terminal zeigt „Drücken Sie zum Beenden eine beliebige Taste“ an.

  12. Drücken Sie eine beliebige Taste, um das Programm zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die Releaseversion umfasst Compileroptimierungen, die das Verhalten einer Anwendung beeinträchtigen 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, öffnen Sie das Terminal und führen den folgenden Befehl aus:

dotnet run --configuration Release

Zusätzliche Ressourcen

Nächste Schritte

In diesem Tutorial haben Sie Debugtools von Visual Studio Code verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio Code zum Arbeiten mit .NET-Apps verfügbar sind.

Voraussetzungen

Verwenden der Debugbuildkonfiguration

Debug und Release sind in .NET integrierte Buildkonfigurationen. 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 wird in den Visual Studio Code-Starteinstellungen die Debugbuildkonfiguration verwendet, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio Code.

  2. Öffnen Sie den Ordner des Projekts, das Sie in Tutorial: Erstellen einer .NET-Konsolenanwendung mit Visual Studio Code erstellt haben.

Haltepunkt festlegen

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

  1. Öffnen Sie die Datei Program.cs.

  2. Legen Sie einen Breakpoint in der Zeile fest, in der der Name, das Datum und die Uhrzeit angezeigt werden, indem Sie auf den linken Rand des Codefensters klicken. Der linke Rand befindet sich links von den Zeilennummern. Andere Möglichkeiten zum Festlegen eines Breakpoints bestehen darin, F9 zu drücken oder Ausführen>Haltepunkt umschalten aus dem Menü auszuwählen, während die Codezeile ausgewählt ist.

    Visual Studio Code gibt die Zeile an, in der der Haltepunkt festgelegt ist, indem ein roter Punkt am linken Rand angezeigt wird.

    Breakpoint set

Einrichtung für Terminaleingabe

Der Breakpoint befindet sich hinter einem Console.ReadLine-Methodenaufruf. Die Debugkonsole akzeptiert keine Terminaleingaben für ein aktuell ausgeführtes Programm. Zum Verarbeiten von Terminaleingaben beim Debuggen können Sie das integrierte Terminal (eines der Visual Studio Code-Fenster) oder ein externes Terminal verwenden. In diesem Tutorial verwenden Sie das integrierte Terminal.

  1. Öffnen Sie .vscode/launch.json.

  2. Ändern Sie die console-Einstellung von internalConsole in integratedTerminal:

    "console": "integratedTerminal",
    
  3. Speichern Sie die Änderungen.

Debugging starten

  1. Öffnen Sie die Debugansicht, indem Sie im Menü auf der linken Seite das Debugsymbol auswählen.

    Open the Debug tab in Visual Studio Code

  2. Wählen Sie den grünen Pfeil am oberen Rand des Bereichs neben .NET Core starten (Konsole) aus. Andere Möglichkeiten zum Starten des Programms im Debugmodus besteht darin, F5 zu drücken oder Ausführen>Debuggen starten aus dem Menü auszuwählen.

    Start debugging

  3. Wählen Sie die Registerkarte Terminal aus, um die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) anzuzeigen, die das Programm vor dem Warten auf eine Antwort anzeigt.

    Select the Terminal tab

  4. Geben Sie eine Zeichenfolge im Fenster Terminal als Antwort auf die Aufforderung zur Eingabe eines Namens ein, und drücken Sie dann die EINGABETASTE.

    Die Ausführung des Programms wird beendet, wenn sie den Breakpoint erreicht, und bevor die Console.WriteLine-Methode ausgeführt wird. Im Abschnitt Lokal des Fensters Variablen werden die Werte von Variablen angezeigt, die in der aktuell ausgeführten Methode definiert sind.

    Breakpoint hit, showing Locals

Verwenden der Debugging-Konsole

Das Fenster Debugging-Konsole dient Ihrer Interaktion mit der Anwendung, die Sie debuggen. Sie können den Wert von Variablen ändern, um zu sehen, wie sich dies auf Ihr Programm auswirkt.

  1. Wählen Sie die Registerkarte Debugging-Konsole aus.

  2. Geben Sie name = "Gracie" an der Eingabeaufforderung am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Change variable values

  3. Geben Sie currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime() am unteren Rand des Fensters Debugging-Konsole ein, und drücken Sie EINGABETASTE.

    Im Fenster Variablen werden die neuen Werte der Variablen name und currentDate angezeigt.

  4. Setzen Sie die Ausführung des Programms durch Auswählen der Schaltfläche Fortsetzen in der Symbolleiste fort. Eine weitere Möglichkeit zum Fortsetzen besteht darin, F5 zu drücken.

    Continue debugging

  5. Klicken Sie erneut auf die Registerkarte Terminal.

    Die im Konsolenfenster angezeigten Werte entsprechen den Änderungen im Fenster Debugging-Konsole.

    Terminal showing the entered values

  6. 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 (Klicken bei gedrückter CTRL-TASTE unter macOS) auf den roten Punkt, der den Breakpoint darstellt. Wählen Sie im Kontextmenü Breakpoint bearbeiten aus, um ein Dialogfeld zu öffnen, in dem Sie einen bedingten Ausdruck eingeben können.

    Breakpoint context menu

  2. Wählen Sie in der Dropdownliste Expression aus, geben Sie den folgenden bedingten Ausdruck ein, und drücken Sie die EINGABETASTE.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    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. Starten Sie das Programm im Debugmodus, indem Sie F5drücken.

  4. Drücken Sie auf der Registerkarte Terminal die EINGABETASTE, wenn Sie zur Eingabe Ihres Namens aufgefordert werden.

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

    Im Fenster Variablen wird angezeigt, dass der Wert der name-Variablen "" oder String.Empty ist.

  5. Bestätigen Sie, dass der Wert eine leere Zeichenfolge ist, indem Sie die folgende Anweisung an der Eingabeaufforderung Debugging-Konsole eingeben und dann die EINGABETASTE drücken. Das Ergebnis ist true.

    name == String.Empty
    
  6. Wählen Sie die Schaltfläche Fortfahren auf der Symbolleiste, um die Ausführung des Programms fortzusetzen.

  7. Wählen Sie die Registerkarte Terminal aus, und drücken Sie eine beliebige Taste, um das Programm und das Debuggen zu beenden.

  8. 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 bei markierter Codezeile im Menü Ausführen > Haltepunkt umschalten auszuwählen.

  9. Wenn Sie eine Warnung erhalten, dass die Breakpointbedingung verloren geht, wählen Sie Breakpoint entfernen aus.

Schrittweises Ausführen eines Programms

Mit Visual Studio Code können Sie ein Programm auch zeilenweise durchlaufen und seine Ausführung ü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. Legen Sie einen Breakpoint bei der öffnenden geschweiften Klammer der Main-Methode fest.

  2. Drücken Sie die Taste F5 , um mit dem Debuggen zu beginnen.

    Visual Studio Code hebt die Breakpointzeile hervor.

    An diesem Punkt wird im Fenster Variablen angezeigt, dass das args-Array leer ist und name und currentDate Standardwerte aufweisen.

  3. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Step-Into button

    Visual Studio Code hebt die nächste Zeile hervor.

  4. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code führt die Console.WriteLine für die Aufforderung zur Eingabe des Namens aus und hebt die nächste Ausführungszeile hervor. Die nächste Zeile ist die Console.ReadLine für den name. Das Fenster Variablen ist unverändert, und auf der Registerkarte Terminal wird die Eingabeaufforderung „What is your name?“ (Wie heißen Sie?) angezeigt.

  5. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio hebt die Variablenzuweisung name hervor. Das Fenster Variablen wird geleert.

  6. Reagieren Sie auf die Eingabeaufforderung, indem Sie eine Zeichenfolge auf der Registerkarte „Terminal“ eingeben und die EINGABETASTE drücken.

    Auf der Registerkarte Terminal wird die Zeichenfolge während der Eingabe möglicherweise nicht angezeigt, aber die Console.ReadLine-Methode erfasst Ihre Eingabe.

    Das Fenster Variablen zeigt den vom Aufruf der Methode Console.ReadLine zurückgegebenen Wert an.

  7. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code hebt die Variablenzuweisung currentDate hervor. Auf der Registerkarte Terminal wird die Zeichenfolge angezeigt, die Sie an der Eingabeaufforderung eingegeben haben.

  8. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Das Fenster Variablen zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an.

  9. Wählen Sie Ausführen>Einzelschritt aus, oder drücken Sie F11.

    Visual Studio Code ruft die Console.WriteLine(String, Object, Object)-Methode auf. Das Konsolenfenster zeigt die formatierte Zeichenfolge an.

  10. Wählen Sie Ausführen>Ausführen bis Rücksprung aus, oder drücken Sie UMSCHALT+F11.

    Step-Out button

  11. Wählen Sie die Registerkarte Terminal aus.

    Das Terminal zeigt „Drücken Sie zum Beenden eine beliebige Taste“ an.

  12. Drücken Sie eine beliebige Taste, um das Programm zu beenden.

Verwenden der Releasebuildkonfiguration

Nachdem Sie die Debugversion der Anwendung getestet haben, sollten Sie auch die Releaseversion kompilieren und testen. Die Releaseversion umfasst Compileroptimierungen, die das Verhalten einer Anwendung beeinträchtigen 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, öffnen Sie das Terminal und führen den folgenden Befehl aus:

dotnet run --configuration Release

Zusätzliche Ressourcen

Nächste Schritte

In diesem Tutorial haben Sie Debugtools von Visual Studio Code verwendet. Im nächsten Tutorial veröffentlichen Sie eine bereitstellbare Version der App.