Tutorial: Debuggen einer .NET-Konsolenanwendung mit Visual Studio für Mac

Wichtig

Microsoft hat die Ausmusterung von Visual Studio für Mac angekündigt. Visual Studio für Mac wird ab dem 31. August 2024 nicht mehr unterstützt. Zu den Alternativen gehören:

  • Visual Studio Code mit dem C# Dev-Kit und verwandten Erweiterungen, z. B. .NET MAUI und Unity.
  • Visual Studio wird unter Windows in einer VM auf einem Mac ausgeführt.
  • Visual Studio wird unter Windows in einer VM in der Cloud ausgeführt.

Weitere Informationen finden Sie in der Ausmusterungsankündigung von Visual Studio für Mac.

In diesem Tutorial werden die Debugtools vorgestellt, die in Visual Studio für Mac 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 für Mac die Debugbuildkonfiguration, sodass Sie diese Einstellung vor dem Debuggen nicht ändern müssen.

  1. Starten Sie Visual Studio für Mac.

  2. Öffnen Sie das Projekt, das Sie in Erstellen einer .NET-Konsolenanwendung mit Visual Studio für Mac 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. Platzieren Sie hierzu den Cursor in der Codezeile, und drücken Sie \ (BEFEHL+\). Eine andere Möglichkeit zum Festlegen eines Haltepunkts besteht darin, im Menü Debuggen>Haltepunkt umschalten auszuwählen.

    Visual Studio hebt die Zeile hervor, in der der Haltepunkt festgelegt ist, und zeigt am linken Rand einen roten Punkt an.

    Visual Studio Program window with breakpoint set

  2. Drücken Sie (BEFEHL+EINGABETASTE) ein, um das Programm im Debugmodus zu starten. Eine andere Möglichkeit, das Debuggen zu starten, besteht darin, im Menü Debuggen>Debuggen starten zu wählen.

  3. Geben Sie eine Zeichenfolge im Terminalfenster 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 es den Haltepunkt erreicht, bevor die Console.WriteLine-Methode ausgeführt wird.

    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 Fenster Direkt nicht angezeigt wird, blenden Sie es durch Auswählen von Ansicht>Debugfenster>Direkt ein.

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

  3. Geben Sie currentDate = currentDate.AddDays(1) im Fenster Direkt ein, und drücken Sie die EINGABETASTE.

    Im Fenster Direkt werden der Wert der Zeichenfolgenvariablen und die Eigenschaften des DateTime-Werts angezeigt.

    Immediate Window in Visual Studio

    Im Fenster Lokale Variablen werden die Werte von Variablen angezeigt, die in der gerade ausgeführten Methode definiert sind. Die Werte der Variablen, die Sie gerade geändert haben, werden im Fenster Lokale Variablen aktualisiert.

    Locals Window in Visual Studio

  4. Drücken Sie (BEFEHL+EINGABETASTE), um das Debuggen fortzusetzen.

    Die im Terminal gezeigten Werte entsprechen Ihren Änderungen im Fenster Direkt.

    Wenn das Terminal nicht angezeigt wird, wählen Sie auf der unteren Navigationsleiste Terminal – HelloWorld aus.

    Terminal - Hello World in bottom navigation bar

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

  6. Schließen Sie das Terminalfenster.

Festlegen eines bedingten Breakpoints

Das Programm zeigt eine 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 bei gedrückter CTRL-Taste auf den roten Punkt, der den Haltepunkt darstellt. Wählen Sie im Kontextmenü Haltepunkt bearbeiten aus.

  2. Geben Sie im Dialogfeld Haltepunkt bearbeiten den folgenden Code in das folgende Feld ein Und die folgende Bedingung „True“ ist, und wählen Sie Anwenden aus.

    String.IsNullOrEmpty(name)
    

    Editor showing breakpoint settings panel

    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.

  3. Drücken Sie (BEFEHL+EINGABETASTE), um das Debuggen zu starten.

  4. Drücken Sie im Terminalfenster 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 Haltepunkt erreicht wird.

  5. Wählen Sie das Fenster Lokale Variablen 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 die Variable name den Wert "", d. h. String.Empty, hat.

  6. Sie können auch erkennen, dass der Wert eine leere Zeichenfolge ist, indem Sie den Namen der Variablen name in das Fenster Direkt eingeben und die EINGABETASTE drücken.

    Immediate window showing name is an empty string

  7. Drücken Sie (BEFEHL+EINGABETASTE), um das Debuggen fortzusetzen.

  8. Drücken Sie im Terminalfenster eine beliebige Taste, um das Programm zu beenden.

  9. Schließen Sie das Terminalfenster.

  10. Löschen Sie den Haltepunkt durch Klicken auf den Punkt am linken Rand des Codefensters. Eine andere Möglichkeit, einen Haltepunkt zu löschen, besteht darin, Debuggen > Haltepunkt ein-/ausschalten auszuwählen, während die Codezeile ausgewählt 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. Legen Sie einen Haltepunkt auf der geschweiften Klammer fest, die den Anfang der Main-Methode markiert (drücken Sie Befehl+\).

  2. Drücken Sie (BEFEHL+EINGABETASTE), um das Debuggen zu starten.

    Visual Studio wird in der Zeile mit dem Haltepunkt angehalten.

  3. Drücken Sie I (UMSCHALT+BEFEHL+I), oder wählen Sie Debuggen>Einzelschritt aus, um eine Zeile weiterzugehen.

    Visual Studio markiert einen Pfeil neben der nächsten Zeile der Ausführung und zeigt diesen an.

    Visual Studio step into method

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

  4. Drücken Sie I(UMSCHALT+Befehl+I).

    Visual Studio hebt die Anweisung hervor, die die Zuweisung der Variablen name enthält. Das Fenster Lokale Variablen zeigt, dass name den Wert null aufweist, und das Konsolenfenster zeigt die Zeichenfolge „What is your name?“ an.

  5. Reagieren Sie auf die Eingabeaufforderung, indem Sie eine Zeichenfolge in das Konsolenfenster eingeben und die EINGABETASTE drücken.

  6. Drücken Sie I(UMSCHALT+Befehl+I).

    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 Terminal wird die Zeichenfolge angezeigt, die Sie an der Eingabeaufforderung eingegeben haben.

  7. Drücken Sie I(UMSCHALT+Befehl+I).

    Das Fenster Lokale Variablen zeigt den Wert der Variablen currentDate nach der Zuweisung aus der DateTime.Now-Eigenschaft an. Das Terminal ist unverändert.

  8. Drücken Sie I(UMSCHALT+Befehl+I).

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

  9. Drücken Sie u (UMSCHALT+BEFEHL+U), oder wählen Sie Ausführen>Rücksprung aus.

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

  10. 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 endgültige 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, führen Sie die folgenden Schritte aus:

  1. Ändern Sie die Buildkonfiguration auf der Symbolleiste von Debug in Release.

    default Visual Studio toolbar with release highlighted

  2. Drücken Sie (OPTION+BEFEHL+EINGABETASTE) zum Ausführen ohne Debuggen.

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.