Navigieren durch Code mithilfe des Visual Studio-Debuggers

Mit dem Visual Studio-Debugger können Sie durch Code navigieren, um den Zustand einer App zu überprüfen und deren Ausführungsablauf anzuzeigen. Dieser Vorgang wird auch als Codeausführung in Einzelschritten bezeichnet. Sie können Tastenkombinationen, Debugbefehle, Haltepunkte und andere Funktionen verwenden, um schnell zu dem Code zu gelangen, den Sie untersuchen möchten. Wenn Sie mit den Navigationsbefehlen und Tastaturkurzbefehlen des Debuggers vertrauter werden, können Sie App-Probleme schneller und einfacher finden und beheben. Eine Liste der gängigsten Tastenkombinationen im Zusammenhang mit der Codenavigation und dem Debuggen finden Sie im Abschnitt Debuggen unter „Tastenkombinationen“.

Hinweis

Wenn Sie noch nicht mit dem Debuggen von Code vertraut sind, sollten Sie Debuggen für Anfänger und Debugverfahren und --tools lesen, bevor Sie diesen Artikel lesen.

Starten des Debuggens und Wechseln in den Unterbrechungsmodus

Einige Navigationsbefehle starten Ihre App und fügen den Debugger automatisch an. Ihre App wird basierend auf dem Befehl, den Sie zum Starten der Navigation verwendet haben, in einer bestimmten Codezeile angehalten, und Sie wechseln in den Unterbrechungsmodus (d. h. Ihre App wird im Debugger angehalten).

Im Unterbrechungsmodus wird die Ausführung der App angehalten, während Funktionen, Variablen und Objekte im Speicher verbleiben. Wenn sich der Debugger im Unterbrechungsmodus befindet, können Sie durch Ihren Code navigieren. Es gibt zwei gängige Möglichkeiten, schnell in den Unterbrechungsmodus zu gelangen:

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. h. wenn die App im Debugger angehalten wird).

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 und 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 Fenster Module und Überwachen, 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.

Hinweis

Wenn Sie Code unterbrechen, in dem keine Quell- oder Symboldateien (PDB-Dateien) geladen sind, zeigt der Debugger die Seite Source Files Not Found (Quelldateien wurden nicht gefunden) oder Symbols Not Found (Symbole wurden nicht gefunden) an, auf denen Sie Dateien suchen und laden können. Weitere Informationen finden Sie unter Angeben von Symbol- und Quelldateien. Wenn Sie die Symbol- oder Quelldateien nicht laden können, können Sie dennoch die Assemblyanweisungen im Fenster Disassembly debuggen.

Codeausführung in Einzelschritten

Codeschritte beziehen sich auf das schrittweise Ausführen Ihres Anwendungscodes mit angefügtem Debugger. Mithilfe der Debuggerschrittbefehle können Sie die Auswirkungen jeder Anweisung beobachten und mehr über den Ausführungsablauf erfahren.

Schrittweises Ausführen von Code

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

Der Debugger durchläuft Codeanweisungen und nicht 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!";

Wenn Sie diese Zeile jedoch schrittweise ausführen, behandelt der Debugger die Bedingung als einen Schritt und die Folge als einen anderen. Im vorherigen Beispiel ist die Bedingung TRUE.

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

Tipp

Wenn Sie jede Codezeile ausführen, können Sie mit dem Mauszeiger auf Variablen zeigen, um ihre Werte anzuzeigen, oder die Fenster Lokal und Überwachung verwenden, um die Änderung der Werte zu überwachen. Sie können die Aufrufliste auch visuell verfolgen, während Sie Funktionen schrittweise ausführen. (Weitere Informationen, die nur für Visual Studio Enterprise gelten, finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen.)

Durchlaufen von Code und Überspringen einiger Funktionen

Möglicherweise interessieren Sie sich beim Debuggen nicht für eine Funktion. Vielleicht wissen Sie auch, dass manche Teile des Codes funktionieren, z. B. gut getesteter Bibliothekscode. Sie können die folgenden Befehle verwenden, um Code bei der Ausführen in Einzelschritten zu überspringen. Die Funktionen werden weiterhin ausgeführt, aber der Debugger überspringt sie.

Tastaturbefehl Menübefehle für das Debuggen Beschreibung
F10 Prozedurschritt Wenn die aktuelle Zeile einen Funktionsaufruf enthält, führt Überspringen den Code aus und hält dann die Ausführung in der ersten Codezeile an, nachdem die aufgerufene Funktion zurückgegeben wurde.
UMSCHALT+F11 Ausführen bis Rücksprung Herausspringen 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 ziehen Sie es vor, direkt bis zu einer bestimmten Position oder Funktion auszuführen, wenn Sie genau wissen, welchen Code Sie untersuchen oder wo Sie mit dem Debuggen beginnen möchten.

  • Das Festlegen eines Breakpoints eignet sich am besten, wenn Sie der Meinung sind, dass Sie den Breakpoint erneut verwenden möchten.
  • Andere Methoden dienen der Bequemlichkeit und ähneln dem Festlegen eines temporären Breakpoints.

Ausführen bis zu einem Haltepunkt im Code

Um einen einfachen Breakpoint in Ihrem Code festzulegen, wählen Sie den linken Rand neben der Codezeile aus, in der Sie die Ausführung anhalten möchten. Sie können auch die Zeile auswählen und dann F9 auswählen, anschließend Debug>Haltepunkt umschalten auswählen oder mit der rechten Maustaste klicken und Haltepunkt>Haltepunkt einfügen auswählen. Der Breakpoint 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 that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Breakpoints in Visual Studio bieten umfangreiche Funktionen, z. B. bedingte Breakpoints und Ablaufverfolgungspunkte. Weitere Informationen finden Sie unter Verwenden von Breakpoints im Visual Studio-Debugger.

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 ihres Namens angeben oder in der Aufrufliste auswählen.

So geben Sie einen Funktionsbreakpoint anhand des Namens an:

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

  2. Geben Sie im Dialogfeld Neuer Funktionshaltepunkt den Namen der Funktion ein, und wählen Sie ihre Sprache aus:

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. Klicken Sie auf OK.

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 that shows breakpoints window.

Screenshot that shows breakpoints window.

So wählen Sie einen Funktionsbreakpoint aus der Aufrufliste 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 Breakpoints.

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 Force Run To Cursor (Ausführung bis Cursor erzwingen) aus. Wenn Sie Force Run to Cursor (Ausführung bis Cursor erzwingen) auswählen, werden alle Breakpoints 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 Breakpoints.

Screenshot that shows Run to Click and the green arrow.

Hinweis

Run to Click (Ausführen bis Klick) 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 Force run execution to here (Ausführung bis hier erzwingen) (der grüne 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 Breakpoints und Ausnahmen (erste Chance), die während der Ausführung gefunden wurden, werden vorübergehend deaktiviert.

Screenshot that shows Force Run to Click.

Hinweis

Force Run to Click (Erzwingen von „Ausführen bis Klick“) ist ab Visual Studio 2022 verfügbar.

Manuelles Unterbrechen im Code

Wählen Sie Debuggen>Alle unterbrechen aus, oder wählen Sie Strg+Alt+Unterbrechen aus, um in einer ausgeführten App in der nächsten verfügbaren Codezeile zu unterbrechen.

Debuggen von IDE-generiertem Code

Der Debugger versucht standardmäßig, durch Aktivieren der Einstellung Nur eigenen Code nur Ihren App-Code zu debuggen. Weitere Informationen dazu, wie dieses Feature für verschiedene Projekttypen und Sprachen funktioniert, und wie Sie es anpassen können, finden Sie unter Nur mein Code.

Sie können „Nur eigenen Code“ deaktivieren, um während des Debuggens Frameworkcode, Bibliothekscode von Drittanbietern oder Systemaufrufe zu überprüfen. Deaktivieren Sie in Extras (oder Debug) >Optionen>Debuggen das Kontrollkästchen Nur eigenen Code aktivieren. Wenn „Nur eigenen Code“ deaktiviert ist, wird im Debuggerfenster IDE-generierter Code angezeigt, und der Debugger kann den IDE-generierten Code schrittweise ausführen.

Hinweis

„Nur mein Code“ wird für Geräteprojekte nicht unterstützt.

Debuggen von Systemcode

Wenn Sie Debugsymbole für Microsoft-Systemcode geladen und „Nur mein Code“ deaktiviert haben, können Sie einen Systemaufruf genau wie jeden anderen Aufruf schrittweise ausführen.

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

Weitere Informationen zum Laden von Microsoft-Symbolen finden Sie unter Konfigurieren der Symboldateispeicherorte und Ladeoptionen.

So laden Sie Symbole für eine bestimmte Systemkomponente:

  1. Öffnen Sie während des Debuggens das Fenster Module, indem Sie Debug>Windows>Module auswählen oder indem Sie Strg+Alt+u auswählen.

  2. Im Fenster Module können Sie feststellen, für welche Module Symbole in der Spalte Symbolstatus geladen sind. Klicken Sie mit der rechten Maustaste auf das Modul, für das Sie Symbole laden möchten, und wählen Sie dann Load Symbols (Symbole laden) aus.

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 bietet dieses Verhalten eine bessere Debugerfahrung. Wählen Sie Debug>Optionen aus, um das schrittweise Ausführen in Eigenschaften oder Operatoren zu deaktivieren. Deaktivieren Sie auf der Seite Debuggen>Allgemein das Kontrollkästchen Eigenschaften und Operatoren überspringen (nur verwaltet) .

Bewegen des Zeigers zum Ändern des Ausführungsablaufs

Sie können die nächste Anweisung ändern, die ausgeführt wird, 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.