Starten, Unterbrechen, schrittweise Ausführung, Ausführen von Code und Beenden des Debuggens in Visual Studio

Debugging eines Visual Studio-Projekts starten, Anfügen an einen Prozess, Unterbrechen im Code, Code durcharbeiten, Ausführen bis zum Cursor, Ausführen bis zu einer Funktion in der Aufrufliste, nächste Anweisung festlegen, "Nur Mein Code" durcharbeiten, Debuggen beenden, Debuggen neu starten, von einem debuggten Prozess trennen

Inhalt

Start debugging a VS project; attach to a process

Break into code, step or run through code, set the next statement to execute

Stop, restart debugging; detach from the debugged process

Debugging eines Visual Studio-Projekts starten, Anfügen an einen Prozess

  • Start debugging a VS project**|**Attach to a process

Debugging eines Visual Studio-Projekts starten

Wenn eine Projektmappe in Visual Studio geöffnet ist, haben Sie drei Möglichkeiten zum Starten des Debuggings.:

Wählen Sie Debuggen, Debugging starten (Tastatur: F5).

Die Anwendung wird gestartet und ausgeführt, bis folgende Situation eintritt:

  • Der Debugger erreicht einen Haltepunkt.

  • Wählen Sie im Menü Debuggen die Option Debuggen beenden.

  • Es wird eine Ausnahme ausgelöst.

  • Die Anwendung wird beendet.

Wählen Sie Debuggen, Einzelschritt (Tastatur: F11) oder Debuggen, Prozedurschritt (Tastatur: F10) aus.

Die Anwendung wird gestartet und in der ersten Zeile unterbrochen.

Wählen Sie in einem Quellcodefenster eine Zeile mit ausführbarem Code aus, und klicken Sie dann im Kontextmenü auf Ausführen bis Cursor.

Die Anwendung wird gestartet und ausgeführt, bis ein Haltepunkt bzw. die Cursorposition erreicht wird.

Informationen zur visuellen Nachverfolgung der Codeausführung in einer Codezuordnung während des Debuggings finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen in Visual Studio.

Zurück nach obenContents | Start debugging a VS project; attach to a process

Anfügen an einen Prozess

Der Debugger kann auch an ein Programm angefügt werden, das in einem Prozess außerhalb von Visual Studio ausgeführt wird. Nachdem Sie den Debugger an ein Programm angefügt haben, können Sie dessen Ausführungsbefehle verwenden, den Programmzustand überprüfen usw. Die Möglichkeiten zum Überprüfen des Programms sind ggf. eingeschränkt. Dies hängt davon ab, ob das Programm mit Debuginformationen erstellt wurde, ob Sie Zugriff auf den Quellcode des Programms haben und ob der JIT-Compiler der Common Language Runtime die Debuginformationen verfolgt.

So fügen Sie den Debugger an einen auf dem lokalen Computer ausgeführten Prozess an

Wählen Sie Debuggen, An den Prozess anhängen aus. Wählen Sie den Prozess im Dialogfeld An den Prozess anhängen in der Liste Verfügbare Prozesse aus, und klicken Sie dann auf Anfügen.

Dialogfeld "An den Prozess anhängen"

Weitere Informationen finden Sie unter Anfügen an laufende Prozesse mit dem Visual Studio Debugger.

Zurück nach obenContents | Start debugging a VS project; attach to a process

Unterbrechen im Code, Code durcharbeiten bzw. schrittweise durchlaufen, nächste auszuführende Anweisung festlegen

  • Break into code by using breakpoints or Break All**|Step into, over, or out of the code|Run to a specified location or function|Set the next statement to execute|Restrict stepping to Just My Code|Step into system calls|**Step into properties and operators in managed code

Unterbrechen im Code mithilfe von Haltepunkten oder alle unterbrechen

Wenn Sie eine Anwendung mit dem Visual Studio-Debugger debuggen, wird die Anwendung entweder ausgeführt, oder sie befindet sich im Unterbrechungsmodus.

Der Debugger unterbricht die Ausführung der Anwendung, wenn sie einen Haltepunkt erreicht oder wenn eine Ausnahme auftritt. Sie können die Ausführung auch jederzeit manuell unterbrechen.

Beim Haltepunkt handelt es sich um ein Signal, das den Debugger anweist, die Ausführung der Anwendung an einem bestimmten Punkt zeitweise zu unterbrechen. Wenn die Ausführung an einem Haltepunkt unterbrochen wird, befindet sich das Programm im so genannten Unterbrechungsmodus. Beim Wechsel in den Unterbrechungsmodus wird die Ausführung des Programms nicht gestoppt oder beendet. Die Ausführung kann jederzeit fortgesetzt werden.

Die meisten Debuggerfunktionen, z. B. die Anzeige von Variablenwerten im Fenster "Lokal" oder die Auswertung von Ausdrücken im Überwachungsfenster, sind nur im Unterbrechungsmodus verfügbar. Alle Elemente der Anwendung bleiben erhalten (z. B. verbleiben Funktionen, Variablen und Objekte im Arbeitsspeicher), jedoch werden ihre Bewegungen und Aktivitäten ausgesetzt. Während des Unterbrechungsmodus können die Positionen und Zustände der Elemente untersucht werden, um nach Verstößen oder Fehlern zu suchen. Sie können auch im Unterbrechungsmodus Anpassungen der Anwendung vornehmen.

Sie können Haltepunkte so konfigurieren, dass die Ausführung aufgrund von mehreren Bedingungen angehalten wird. Siehe Haltepunkte: Verwenden von Trefferanzahl, Funktionen der Aufrufliste und Bedingungen, um im Visual Studio Debugger jederzeit zu unterbrechen. In diesem Abschnitt werden zwei grundlegende Methoden zum Unterbrechen im Code erläutert.

Festlegen von Haltepunkten im Code

Um einen einfachen Haltepunkt im Code festzulegen, öffnen Sie die Quellcodedatei im Visual Studio-Editor. Setzen Sie den Cursor in die Codezeile, in der Sie die Ausführung unterbrechen möchten. Wählen Sie dann im Kontextmenü Haltepunkt, Haltepunkt einfügen (Tastatur: F9). Der Debugger unterbricht die Ausführung, kurz bevor die Zeile ausgeführt wird.

Haltepunkt festlegen

Haltepunkte in Visual Studio bieten einen umfangreichen Satz von zusätzlichen Funktionen, wie z. B. bedingte Haltepunkte und Ablaufverfolgungspunkte. Siehe Haltepunkte: Verwenden von Trefferanzahl, Funktionen der Aufrufliste und Bedingungen, um im Visual Studio Debugger jederzeit zu unterbrechen.

Manuelles Unterbrechen im Code

Um die Ausführung einer Anwendung in der nächsten verfügbaren Codezeile zu unterbrechen, wählen Sie Debuggen, Alle unterbrechen (Tastatur: Ctrl+Alt+Break).

  • Wenn Sie mit aktivierter Option "Nur mein Code" debuggen, wird die Ausführung in der nächsten Codezeile des Projekts unterbrochen. Siehe Restrict stepping to Just My Code.

  • Wenn Sie mehrere Programme debuggen, hat ein Haltepunkt beziehungsweise der Befehl Alle unterbrechen standardmäßig Auswirkungen auf alle gedebuggten Programme. Siehe Configure the execution behavior of multiple processes.

  • Wenn Sie die Ausführung von Code ohne zugehörige Quell- oder Symboldateien (PDF-Dateien) unterbrechen, wird im Debugger die Seite Die Quelldatei wurde nicht gefunden oder Symbol nicht gefunden geöffnet, auf der Sie die entsprechenden Dateien suchen können. Siehe Angeben von Symbol(PDB)- und Quelldateien im Visual Studio Debugger.

    Wenn Sie nicht auf die zugehörigen Hilfsdateien zugreifen können, können Sie dennoch die Assemblyanweisungen im Disassemblyfenster debuggen.

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Code schrittweise ausführen, überspringen oder bis zum Rücksprung ausführen

Eine der häufigsten Debugprozeduren ist das Stepping. Beim Stepping wird der Code zeilenweise ausgeführt. Wenn die Ausführung angehalten wurde (der Debugger beispielsweise bis zu einem Haltepunkt ausgeführt wurde), können Sie drei Befehle im Menü Debuggen verwenden, um den Code schrittweise zu durchlaufen:

Menübefehl

Tastenkombination

Beschreibung

Einzelschritt

F11

Wenn die nächste Zeile einen Funktionsaufruf enthält, führt der Befehl Einzelschritt nur den Aufruf selbst aus und hält anschließend bei der ersten Codezeile innerhalb der Funktion an. Andernfalls wird mit dem Befehl Einzelschritt die nächste Anweisung ausgeführt.

Prozedurschritt

F10

Wenn die Zeile einen Funktionsaufruf enthält, führt der Befehl Prozedurschritt die aufgerufene Funktion aus und hält dann bei der ersten Codezeile in der aufrufenden Funktion an. Andernfalls wird mit dem Befehl Einzelschritt die nächste Anweisung ausgeführt.

Ausführen bis Rücksprung

Shift+F11

Ausführen bis Rücksprung setzt die Ausführung des Codes bis zur Rückgabe der Funktion fort und unterbricht anschließend die Ausführung am Rücksprungpunkt in der aufrufenden Funktion.

  • Bei einem geschachtelten Funktionsaufruf führt Einzelschritt die am tiefsten geschachtelte Funktion in Einzelschritten aus. Wenn Sie Einzelschritt für einen Aufruf wie Func1(Func2()) verwenden, führt der Debugger die Funktion Func2 in Einzelschritten aus.

  • Der Debugger durchläuft tatsächlich durch Codeanweisungen anstatt durch physische Zeilen. Beispielsweise kann eine if-Klausel in eine Zeile geschrieben werden:

    int x = 42;
    string s = "Not answered";
    if( int x == 42) s = "Answered!";
    
    Dim x As Integet = 42
    Dim s As String = "Not answered"
    If x = 42 Then s = "Answered!"
    

    Wenn Sie einen Einzelschritt in diese Zeile ausführen, behandelt der Debugger die Bedingung als einen Schritt und das Ergebnis als anderen Schritt (in diesem Beispiel lautet die Bedingung "true").

Informationen zur visuellen Nachverfolgung der Aufrufliste während der schrittweisen Ausführung innerhalb von Funktionen finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen in Visual Studio.

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Ausführung bis zu einer angegebenen Position oder Funktion

Möglicherweise möchten Sie die Ausführung in einigen Fällen nur bis zu einem bestimmten Punkt im Code ausführen und dann anhalten. Wenn Sie einen Haltepunkt an der Position festgelegt haben, an der Sie die Ausführung unterbrechen möchten, wählen Sie Debuggen, Debugging starten aus (sofern Sie das Debugging noch nicht gestartet haben), oder wählen Sie Debuggen, Weiter aus. (In beiden Fällen ist F5 die zugehörige Tastenkombination). Der Debugger hält am nächsten Haltepunkt in der Ausführung des Codes an. Wählen Sie Debuggen, Weiter aus, bis der gewünschte Haltepunkt erreicht wird.

Sie können den Code auch bis zu der Stelle, an der Sie den Cursor im Code-Editor platziert haben, oder bis zu einer angegebenen Funktion ausführen.

Ausführen bis zur Cursorplatzierung

Um den Code bis zur Cursorposition auszuführen, platzieren Sie den Cursor in einem Quellcodefenster auf eine ausführbare Codezeile. Klicken Sie im Kontextmenü des Editors auf Ausführen bis Cursor.

Ausführen bis zu einer Funktion in der Aufrufliste

Wählen Sie die Funktion im Fenster Aufrufliste aus, und klicken Sie dann im Kontextmenü auf Ausführen bis Cursor. Weitere Informationen zur visuellen Nachverfolgung der Aufrufliste finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen in Visual Studio.

Ausführen bis zu einer Funktion anhand des Namens

Sie können den Debugger anweisen, die Anwendung auszuführen, bis eine bestimmte Funktion erreicht wird. Sie können die Funktion anhand ihres Namens angeben oder in der Aufrufliste auswählen.

Um eine Funktion anhand des Namens anzugeben, wählen Sie Debuggen, Neuer Haltepunkt, Halten bei Funktion aus, und geben Sie dann den Namen der Funktion und andere Identifikationsinformationen ein.

Dialogfeld "Neuer Haltepunkt"

Wenn die Funktion überladen ist oder sich in mehreren Namespaces befindet, können Sie die gewünschten Funktionen im Dialogfeld Haltepunkte wählen auswählen.

Dialogfeld "Haltepunkte wählen"

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Nächste auszuführende Anweisung festlegen

Nachdem Sie die Ausführung im Debugger unterbrochen haben, können Sie den Ausführungspunkt verschieben, um die nächste auszuführende Codeanweisung festzulegen. Die Position der nächsten auszuführenden Anweisung wird durch eine gelbe Pfeilspitze am Rand eines Quellcodefensters oder Disassemblierungsfensters markiert. Durch das Verschieben dieser Pfeilspitze können Sie einen Teil des Codes überspringen oder zu einer bereits ausgeführten Zeile zurückkehren. Dies ist zum Beispiel sinnvoll, um einen Codeabschnitt zu überspringen, von dem bereits bekannt ist, dass er einen Fehler enthält.

Example2

Zum Festlegen der nächsten auszuführenden Anweisung verwenden Sie eine der folgenden Verfahren:

  • Ziehen Sie die gelbe Pfeilspitze in einem Quellcodefenster in derselben Quelldatei an die Position, an der Sie die nächste Anweisung festlegen möchten.

  • Platzieren Sie den Cursor in einem Quellcodefenster in der Zeile, die Sie als Nächstes ausführen möchten, und wählen Sie im Kontextmenü die Option Nächste Anweisung festlegen.

  • Platzieren Sie den Cursor im Dissamblyfenster auf die Assemblyanweisung, die Sie als Nächstes ausführen möchten, und wählen Sie im Kontextmenü die Option Nächste Anweisung festlegen.

Warnung

Das Festlegen der nächsten Anweisung bewirkt, dass der Programmzähler direkt zur neuen Position springt.Seien Sie daher vorsichtig, wenn Sie diesen Befehl verwenden.

  • Anweisungen zwischen den alten und neuen Ausführungspunkten werden nicht ausgeführt.

  • Wenn Sie den Ausführungspunkt rückwärts verschieben, werden dazwischenliegende Anweisungen nicht rückgängig gemacht.

  • Wenn Sie die nächste Anweisung in eine andere Funktion oder in einen anderen Gültigkeitsbereich verschieben, wird i. d. R. die Aufrufliste beeinträchtigt, wodurch ein Laufzeitfehler oder eine Ausnahme ausgelöst wird.Wenn Sie versuchen, die nächste Anweisung in einen anderen Gültigkeitsbereich zu verschieben, wird ein Dialogfenster mit einer Warnung geöffnet, in dem Sie den Vorgang abbrechen können.In Visual Basic können Sie die nächste Anweisung nicht in einen anderen Bereich oder in eine andere Funktion verlegen.

  • In systemeigenem C++-Code kann das Festlegen der nächsten Anweisung bei aktivierter Laufzeitprüfung dazu führen, dass am Ende der Methode eine Ausnahme ausgelöst wird.

  • Wenn die Funktion "Bearbeiten und Fortfahren" aktiviert ist, schlägt das Ausführen der Option Nächste Anweisung festlegen fehl, wenn Sie Änderungen vorgenommen haben, die von "Bearbeiten und Fortfahren" nicht sofort neu zugeordnet werden können.Dies kann auftreten, wenn Sie z. B. Code in einem catch-Block bearbeitet haben.Wenn dies geschieht:Es wird ein Dialogfeld mit der Fehlermeldung angezeigt, dass der Vorgang nicht unterstützt wird.

Hinweis

In verwaltetem Code können Sie die nächste Anweisung unter den folgenden Bedingungen nicht verschieben:

  • Die nächste Anweisung und die aktuelle Anweisung befinden sich in verschiedenen Methoden.

  • Das Debuggen wurde über Just-In-Time-Debuggen gestartet.

  • Die Aufrufliste wird gerade entladen.

  • Eine System.StackOverflowException oder eine System.Threading.ThreadAbortException wurden ausgelöst.

Während die Anwendung aktiv ausgeführt wird, ist es nicht möglich, die nächste Anweisung festzulegen. Zum Festlegen der nächsten Anweisung muss sich der Debugger im Unterbrechungsmodus befinden.

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Schrittweises Durchlaufen für "Nur mein Code" beschränken

Gelegentlich möchten Sie vielleicht während des Debuggens nur den Code betrachten, den Sie selbst geschrieben haben, und anderen Code (z. B. Systemaufrufe) ignorieren. Sie können dazu die Debugoption Nur mein Code verwenden. Mit der Option Nur mein Code wird nicht-benutzerseitiger Code verborgen, sodass dieser Code in den Debuggerfenstern nicht angezeigt wird. Beim Durchführen von Einzelschritten geht der Debugger den nicht-benutzerseitigen Code durch, hält bei der Ausführung dieses Codes jedoch nicht an. Siehe Nur mein Code.

Hinweis

Nur mein Code wird in Geräteprojekten nicht unterstützt.

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Schrittweise Ausführung von Systemaufrufen

Wenn Sie Debugsymbole für den Systemcode geladen haben und "Nur mein Code" deaktiviert ist, können Sie einen Systemaufruf ebenso wie jeden anderen Aufruf schrittweise ausführen.

Informationen zum Deaktivieren von "Nur eigenen Code" finden Sie unter Restrict stepping to Just My Code

Informationen zum Zugriff auf Microsoft-Symboldateien finden Sie im Abschnitt Use symbol servers to find symbol files not on your local machine im Thema Angeben von Symbol(PDB)- und Quelldateien im Visual Studio Debugger.

So laden Sie Symbole für eine bestimmte Systemkomponente während des Debuggings:

  1. Öffnen Sie das Fenster "Module" (Tastatur: Ctrl+Alt+U).

  2. Wählen Sie das Modul aus, für das Sie Symbole laden möchten.

    Sie können in der Spalte Symbolstatus feststellen, für welche Module Symbole geladen sind.

  3. Wählen Sie im Kontextmenü die Option Symbole laden aus.

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Schrittweise Ausführung von Eigenschaften und Operatoren in verwaltetem Code

Standardmäßig überspringt der Debugger die Eigenschaften und Operatoren in verwaltetem Code. In den meisten Fällen sorgt dies für einen besseren Debugvorgang. Um die schrittweise Ausführung von Eigenschaften oder Operatoren zu aktivieren, wählen Sie Debuggen, Optionen und Einstellungen aus. Deaktivieren Sie auf der Seite Debuggen, Allgemein das Kontrollkästchen Eigenschaften und Operatoren überspringen (nur verwaltet).

Zurück nach obenContents | Break into code, step or run through code, set the next statement to execute

Debuggen beenden, Debuggen neu starten, von einem debuggten Prozess trennen

Debuggen beenden bedeutet, die Debugsitzung zu beenden. Ausführung beenden bedeutet, den Prozess, den Sie debuggen, zu beenden und die Debugsitzung zu beenden. Verwechseln Sie dies nicht mit dem Unterbrechen der Ausführung, bei dem die Ausführung des gedebuggten Prozesses vorübergehend angehalten wird, die Debugsitzung jedoch aktiv bleibt. Durch das Abtrennen von einem Prozess wird das Debugging des Prozesses beendet, dieser jedoch weiterhin ausgeführt.

  • Stop debugging from VS**|Close the app that is being debugged|Restart debugging|**Detach from the debugged app

Debuggen in VS beenden

Wählen Sie Debuggen, Debuggen beenden, um den zu debuggenden Prozess zu beenden, wenn das Programm von Visual Studio aus gestartet wurde. Wenn der Debugger nicht in Visual Studio gestartet, sondern an den Prozess angefügt wurde, wird der Prozess weiterhin ausgeführt.

Zurück nach obenContents | Stop, restart debugging; detach from the debugged process

Schließen Sie die debuggte Anwendung.

Wenn Sie eine debuggte Anwendung schließen, wird das Debugging automatisch beendet.

Debuggen neu starten

Wählen Sie Debuggen, Neu starten, um die aktuelle Debugsitzung zu beenden und das Startprojekt im Debugger neu zu starten.

Zurück nach obenContents | Stop, restart debugging; detach from the debugged process

Von einer debuggten Anwendung trennen

Wählen Sie "Debuggen", "Alle trennen", um das Debuggen zu beenden, unterbrechen Sie die Ausführung des debuggten Prozesses bzw. der debuggten Prozesse jedoch nicht.

Tipp

Weitere Informationen zum Anfügen und Steuern von mehreren Prozessen mit Visual Studio finden Sie unter Anfügen an laufende Prozesse mit dem Visual Studio Debugger und Debugging von mindestens einem Prozess in Visual Studio.

Zurück nach obenContents | Stop, restart debugging; detach from the debugged process