Freigeben über


Navigieren durch Code mithilfe des Visual Studio-Debuggers

Der Visual Studio-Debugger kann Ihnen beim Navigieren durch Code helfen, um den Zustand einer App zu überprüfen und den Ausführungsfluss anzuzeigen, der auch als Codeschrittbezeichnet wird. Sie können Tastenkombinationen, Debugbefehle, Haltepunkte und andere Features verwenden, um schnell zum Code zu gelangen, den Sie untersuchen möchten. Indem Sie sich mit Debuggernavigationsbefehlen und Tastenkombinationen vertraut machen, können Sie App-Probleme schneller und einfacher finden und beheben. Eine Liste der am häufigsten verwendeten Tastenkombinationen im Zusammenhang mit der Codenavigation und dem Debuggen finden Sie im Abschnitt Debuggen in Tastenkombinationen.

Anmerkung

Wenn Sie mit dem Debuggen von Code noch nicht fertig sind, sollten Sie Debuggen für absolute Anfänger lesen, und Debugtechniken und Tools, bevor Sie diesen Artikel lesen.

Debugging starten und den Pausenmodus betreten

Einige Navigationsbefehle starten Ihre App und fügen den Debugger automatisch an. Ihre App hält an einer bestimmten Codezeile an, basierend auf dem Befehl, den Sie zum Navigieren verwendet haben, und Sie treten in den Unterbrechungsmodus ein (d.h. Ihre App wird im Debugger pausiert).

Im Unterbrechungsmodus wird die App-Ausführung angehalten, während Funktionen, Variablen und Objekte im Arbeitsspeicher verbleiben. Wenn sich der Debugger im Unterbrechungsmodus befindet, können Sie durch den Code navigieren. Es gibt zwei sehr häufige Möglichkeiten, schnell in den Unterbrechungsmodus zu wechseln:

Codeschrittbefehle können zum Starten Ihrer App verwendet werden, werden jedoch häufiger verwendet, nachdem Sie in den Unterbrechungsmodus gewechselt haben.

Einige Navigationsbefehle werden hauptsächlich im Unterbrechungsmodus verwendet (d. a. wenn Sie im Debugger angehalten sind).

Debuggen und Unterbrechungsmodus

Wenn Sie sich im Unterbrechungsmodus befinden, können Sie verschiedene Befehle verwenden, um durch Ihren Code zu navigieren. Sie können die Werte von Variablen untersuchen, um nach Verstößen oder Fehlern zu suchen. Bei einigen Projekttypen können Sie auch Anpassungen an der App vornehmen, wenn Sie sich im Unterbrechungsmodus befinden.

Die meisten Debuggerfenster wie die Module und Watch Fenster sind nur verfügbar, wenn der Debugger an Ihre App angefügt ist. Manche Debuggerfeatures, wie das Anzeigen von Variablenwerten im Fenster Lokal oder das Auswerten von Ausdrücken im Fenster Überwachen sind nur verfügbar, wenn der Debugger angehalten (d. h. im Unterbrechungsmodus) ist.

Anmerkung

Wenn Sie in Code eindringen, der keine Quell- oder Symboldateien (PDB-Dateien) geladen hat, zeigt der Debugger eine „Quelldateien nicht gefunden“ oder „Symbole nicht gefunden“ Seite an, die Ihnen beim Suchen und Laden der Dateien helfen kann. Weitere Informationen finden Sie unter Angeben von Symbol- und Quelldateien. Wenn Sie das Symbol oder die Quelldateien nicht laden können, können Sie die Assemblyanweisungen weiterhin im fenster Disassembly debuggen.

Codeausführung in Einzelschritten

Codeschritte beziehen sich auf die Schritt-für-Schritt-Ausführung Ihres Anwendungscodes mit angefügtem Debugger. Mithilfe der Debuggerschrittbefehle können Sie die Auswirkungen jeder Anweisung beobachten und mehr über den Ausführungsfluss erfahren.

In den Code eintauchen

Um beim Debuggen jede Anweisung anzuhalten, verwenden Sie Debuggen>Einzelschritt, oder wählen Sie F11 aus.

Der Debugger durchläuft Codeanweisungen und nicht physische Zeilen. Beispielsweise kann eine if Klausel in einer Zeile geschrieben werden:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Wenn Sie jedoch in diese Zeile gelangen, behandelt der Debugger die Bedingung als einen Schritt und die Konsequenz als den nächsten. Im vorherigen Beispiel ist die Bedingung "true".

Bei einem geschachtelten Funktionsaufruf führt Einzelschritt die am tiefsten geschachtelte Funktion in Einzelschritten aus. Wenn Sie z. B. Step Into bei einem Aufruf wie Func1(Func2())verwenden, tritt der Debugger in die Funktion Func2ein.

Tipp

Während Sie jede Codezeile ausführen, können Sie mit dem Mauszeiger auf Variablen zeigen, um deren Werte anzuzeigen, oder die locals und Watch Fenster verwenden, um die Werte zu beobachten. Sie können die Aufrufliste auch visuell verfolgen, während Sie Funktionen Schritt für Schritt ausführen. (Weitere Informationen, die nur für Visual Studio Enterprise gelten, finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen.)

Schrittweises Durchlaufen von Code und Überspringen einiger Funktionen

Vielleicht ist Ihnen eine Funktion beim Debugging egal. Oder Sie wissen vielleicht, dass code funktioniert, z. B. gut getesteter Bibliothekscode. Sie können die folgenden Befehle verwenden, um Code bei der Ausführung in Einzelschritten zu überspringen. Die Funktionen werden weiterhin ausgeführt, der Debugger überspringt sie jedoch.

Tastaturbefehl Befehl im Menü "Debuggen" Beschreibung
F10 Prozedurschritt Wenn die aktuelle Zeile einen Funktionsaufruf enthält, führt Step Over den Code aus und hält die Ausführung an der ersten Codezeile an, nachdem die aufgerufene Funktion zurückgegeben wurde.
UMSCHALT+F11 Ausführen bis Rücksprung Ausführen bis Rücksprung führt weiterhin Code aus und hält die Ausführung an, wenn die aktuelle Funktion Werte zurückgibt. Der Debugger überspringt die aktuelle Funktion.

Ausführen bis zu einer bestimmten Position oder Funktion

Möglicherweise möchten Sie direkt zu einem bestimmten Ort oder einer bestimmten Funktion springen, wenn Sie genau wissen, welchen Code Sie überprüfen möchten, oder wenn Sie wissen, wo Sie mit dem Debuggen beginnen möchten.

  • Das Festlegen eines Haltepunkts ist am besten geeignet, wenn Sie denken, dass Sie den Haltepunkt wiederverwenden möchten.
  • Andere Methoden dienen der Einfachheit halber und ähneln dem Festlegen eines temporären Haltepunkts.

Ausführen bis zu einem Haltepunkt im Code

Wenn Sie einen einfachen Haltepunkt in Ihrem Code festlegen möchten, wählen Sie den linken Rand neben der Codezeile aus, an der Sie die Ausführung anhalten möchten. Sie können auch die Zeile auswählen und dann F9 auswählen, anschließend Debuggen>Haltepunkt umschalten auswählen oder mit der rechten Maustaste klicken und Haltepunkt>Haltepunkt einfügen auswählen. Der Haltepunkt wird als roter Punkt am linken Rand neben der Codezeile angezeigt. Der Debugger hält die Ausführung an, kurz bevor die Zeile ausgeführt wird.

Screenshot: Festlegen eines Haltepunkts.

Screenshot: Festlegen eines Haltepunkts.

Haltepunkte in Visual Studio bieten eine Vielzahl von Funktionen, z. B. bedingte Haltepunkte und Spurpunkte. Weitere Informationen finden Sie unter Verwenden von Haltepunkten.

Ausführen bis zu einem Funktionshaltepunkt

Sie können festlegen, dass der Debugger ausgeführt wird, bis er eine angegebene Funktion erreicht. Sie können die Funktion anhand des Namens angeben, oder Sie können sie aus dem Aufrufstapel auswählen.

So geben Sie einen Funktionshaltepunkt anhand des Namens an:

  1. Wählen Sie Debuggen>Neuer Haltepunkt>Funktionshaltepunkt aus.

  2. Geben Sie im Dialogfeld Neuen Funktionstrennpunkt den Namen der Funktion ein, und wählen Sie dessen Sprache aus:

    Screenshot mit dem Dialogfeld

    Screenshot mit dem Dialogfeld

  3. Wählen Sie OKaus.

Wenn die Funktion überladen oder in mehr als einem Namespace vorhanden ist, können Sie im Fenster Haltepunkte den gewünschten Namespace auswählen:

Screenshot: Breakpointfenster.

Screenshot: Haltepunktfenster.

So wählen Sie einen Funktionstrennpunkt aus dem Aufrufstapel aus:

  1. Öffnen Sie während des Debuggens das Fenster Aufrufliste, indem Sie auf Debuggen>Fenster>Aufrufliste klicken.

  2. Klicken Sie im Fenster Aufrufliste mit der rechten Maustaste auf eine Funktion, und wählen Sie Ausführen bis Cursor aus, oder wählen Sie Strg+F10 aus.

Weitere Informationen zur visuellen Ablaufverfolgung der Aufrufliste finden sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen.

Ausführen bis zur Cursorposition

Wählen Sie zum Ausführen bis zur Cursorposition im Quellcode oder im Fenster Aufrufliste die Zeile aus, an der Sie unterbrechen möchten. Klicken Sie mit der rechten Maustaste, und wählen Sie Ausführen bis Cursor aus, oder wählen Sie Strg+F10 aus. Das Auswählen von Bis Cursor ausführen ähnelt dem Festlegen eines temporären Haltepunkts.

Erzwingen der Ausführung bis zur Cursorposition

Wählen Sie zum Ausführen bis zur Cursorposition im Quellcode oder im Fenster Aufrufliste die Zeile aus, an der Sie unterbrechen möchten. Klicken Sie dann mit der rechten Maustaste, und wählen Sie Ausführung bis Cursor erzwingen aus. Wenn Sie Ausführung bis Cursor erzwingen auswählen, werden alle Haltepunkte und Ausnahmen (erste Chance) übersprungen, bis der Debugger die Codezeile erreicht, in der sich der Cursor befindet.

Ausführen bis Klick

Während die Ausführung des Debuggers angehalten ist, können Sie im Quellcode oder im Fenster Disassemblierung auf eine Anweisung zeigen und das grüne Pfeilsymbol Ausführung bis hier ausführen auswählen. Das Verwenden von Ausführung bis Klick ähnelt dem Festlegen eines temporären Haltepunkts.

Screenshot: „Ausführen bis Klick“ und grüner Pfeil.

Anmerkung

Mit Klick ausführen ist ab Visual Studio 2017 verfügbar.

Erzwingen von „Ausführen bis Klick“

Wenn die Ausführung des Debuggers angehalten ist, können Sie mit dem Mauszeiger auf eine Anweisung im Quellcode zeigen, während Sie die UMSCHALT-Taste drücken, und dann Ausführung bis hier erzwingen (grüner Doppelpfeil) auswählen. Wenn Sie diese Option auswählen, fügt die Anwendung den Visual Studio-Debugger an und hält an der Cursorposition an. Alle Haltepunkte und Ausnahmen (erste Chance), die während der Ausführung gefunden wurden, werden vorübergehend deaktiviert.

Screenshot: Ausführen bis Klick erzwingen.

Anmerkung

Ausführen bis Klick erzwingen ist ab Visual Studio 2022 verfügbar.

Manuelles Eindringen in den Code

Um die Ausführung einer Anwendung in der nächsten verfügbaren Codezeile zu unterbrechen, wählen Sie Debuggen>Alle unterbrechen aus, oder wählen Sie Strg+Alt+Unterbrechen aus.

Debuggen von Nichtbenutzercode

Standardmäßig versucht der Debugger, nur Ihren App-Code zu debuggen, indem eine Einstellung namens Just My Codeaktiviert wird. Ausführliche Informationen dazu, wie dieses Feature für verschiedene Projekttypen und Sprachen funktioniert und wie Sie es anpassen können, finden Sie unter Just My Code.

Um Frameworkcode, Bibliothekscode von Drittanbietern oder Systemaufrufen beim Debuggen zu betrachten, können Sie just My Code deaktivieren. Deaktivieren Sie in Extras (oder Debuggen) >Optionen>Debuggen das Kontrollkästchen Nur eigenen Code aktivieren. Wenn "Nur Mein Code" deaktiviert ist, wird in den Debuggerfenstern kein Benutzercode angezeigt, und der Debugger kann in den Nichtbenutzercode wechseln.

Anmerkung

"Just My Code" wird für Geräteprojekte nicht unterstützt.

Debuggen von Systemcode

Wenn Sie Debugsymbole für Microsoft-Systemcode geladen und just My Code deaktiviert haben, können Sie einen Systemaufruf genau wie jeder andere Aufruf ausführen.

Ab Visual Studio 2022, Version 17.7, können Sie .NET-Code automatisch dekompilieren, wenn Sie in externen Code wechseln, ohne dass Debugsymbole manuell geladen werden müssen. Weitere Informationen finden Sie unter Generieren von Quellcode aus .NET-Assemblys beim Debuggen.

Informationen zum Laden von Microsoft-Symbolen finden Sie unter Konfigurieren des Speicherorts von Symboldateien und Ladeoptionen.

So laden Sie Symbole für eine bestimmte Systemkomponente:

  1. Öffnen Sie beim Debuggen das Fenster Module, indem Sie Debug>Windows>Module auswählen oder durch Drücken von STRG+ALT+U.

  2. Im Fenster Module können Sie feststellen, welche Module in der Spalte Symbol Status Symbole geladen haben. Klicken Sie mit der rechten Maustaste auf das Modul, für das Sie Symbole laden möchten, und wählen Sie dann "Symbole laden"aus.

Eintauchen in Eigenschaften und Operatoren in verwaltetem Code

Der Debugger überspringt standardmäßig Eigenschaften und Operatoren in verwaltetem Code. In den meisten Fällen bietet dieses Verhalten eine bessere Debugerfahrung. Um das Springen in Eigenschaften oder Operatoren zu aktivieren, wählen Sie Debug>Optionenaus. Deaktivieren Sie auf der Seite Debuggen>Allgemein das Kontrollkästchen Eigenschaften und Operatoren überspringen (nur verwaltet).

Bewegen des Zeigers zum Ändern des Ausführungsflusses

Sie können die nächste Anweisung, die ausgeführt wird, ändern, indem Sie den gelben Ausführungszeiger verschieben. Sie können dieses Feature im Unterbrechungsmodus verwenden.

Dies ist ein erweitertes Debuggerfeature. Weitere Informationen finden Sie unter Verschieben des Ausführungszeigers.