Freigeben über


Starten, Unterbrechen, Navigieren und Anhalten des Visual Studio-Debuggers

In diesem Thema

In diesem Thema

Anfangsdebuggen

  • Anfügen an einen Prozess

  • Starten Sie automatisch eine Anwendung im Debugger

Navigieren Sie den Code in einer Debugsitzung

  • Unterbrechung in Code, indem sie Haltepunkte verwendet, alle oder abbrechen

  • Wenden Sie, über oder aus den Code bis

  • Ausführen bis zu einer angegebenen Position oder Funktion

  • Legen Sie die folgende Anweisung fest, die Ausführung

  • Restrict schrittweise zu Nur mein Code

  • Schritt in Systemaufrufe

  • Wenden Sie in Eigenschaften und Operatoren in verwaltetem Code

Den Debugvorgang beenden

Anfangsdebuggen

Wenn die Projektmappe geöffnet ist, ist Visual Studio, Sie haben drei Auswahlmöglichkeiten, um das Debuggen zu starten:

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

die App-Anfänge und wird dann bis ausgeführt:

  • Der Debugger einen Haltepunkt erreicht.

  • Sie wählen Debuggen beenden auf dem Menü Debuggen aus.

  • Eine - Ausnahme wird ausgelöst.

  • Die wegen.

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

die App-Anfänge und dann -Unterbrechungen in der ersten Zeile.

In einem Quellcodefenster wählen Sie eine Zeile mit ausführbarem Code aus und wählen Sie Ausführen bis Cursor im Kontextmenü aus.

Ihre Anwendung gestartet und wird, bis ein Haltepunkt oder die Cursorplatzierung erreicht ausgeführt, das zuerst stammt.

y740d9d3.collapse_all(de-de,VS.110).gifAnfügen an einen Prozess

Der Debugger kann zu einem Programm auch anfügen, die in eine Prozessaußenseite von Visual Studio ausgeführt wird.Nachdem Sie einem Programm anfügen, können Sie die Ausführungsbefehle des Debuggers verwenden, den Programmzustand überprüfen, u. a.Die Fähigkeit, das Programm zu überprüft, abhängig von eingeschränkt werden, ob das Programm mit Debuginformationen erstellt wurde und ob Sie Zugriff auf den Quellcode des Programms haben und ob der JIT-Compiler (Just-In-Time-Compiler.

So an einen Prozess anfügen, der auf dem lokalen Computer ausgeführt wird

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

Dialogfeld "An den Prozess anhängen"

Weitere Informationen finden Sie unter Anhängen an laufende Prozesse.

y740d9d3.collapse_all(de-de,VS.110).gifStarten Sie automatisch eine Anwendung im Debugger

In bestimmten Fällen kann es erforderlich sein, dass Sie den Startcode für eine Anwendung debuggen, die von einem anderen Prozess gestartet wird.Zu den Beispielen hierfür gehören Dienste und benutzerdefinierte Setupaktionen.Für diese Szenarios können Sie festlegen, dass der Debugger beim Starten der Anwendung gestartet und automatisch an die Anwendung angefügt wird.

  1. Starten Sie den Registrierungs-Editor (regedit.exe).

  2. Navigieren Sie zu HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options den Ordner.

  3. Wählen Sie den Ordner der App aus, die Sie im Debugger starten möchten.

    Wenn der Name der App nicht als untergeordneter Ordner aufgeführt wird, wählen Sie Image File Execution Options und dann Neu, Schlüssel im Kontextmenü aus.Wählen Sie den neuen Schlüssel Umbenennen aus, wählen Sie im Kontextmenü aus, und geben Sie dann den Namen der Anwendung ein.

  4. Klicken Sie im Kontextmenü des App-Ordners, wählen Sie Neu, Zeichenfolgenwert aus.

  5. Ändern Sie den Namen des neuen Werts von New Value zu Debugger.

  6. Klicken Sie im Kontextmenü des Debuggereintrags, wählen Sie Ändern aus.

  7. Klicken Sie im Bearbeiten-Zeichenfolgendialogfeld geben Sie vsjitdebugger.exeWertdaten im Feld ein.

    Dialogfeld "Zeichenfolge bearbeiten"

Eintrag für automatischen Debuggerstart in "regedit.exe"

In diesem Thema

y740d9d3.collapse_all(de-de,VS.110).gifUnterbrechung in Code, indem sie Haltepunkte verwendet, alle oder abbrechen

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 App, wenn die Ausführung einen Haltepunkt erreicht, oder wenn eine Ausnahme auftritt.Sie können die Ausführung auch jederzeit manuell unterbrechen.

Ein Haltepunkt ist ein Signal, das den Debugger anweist, die Ausführung der Anwendung an einem bestimmten Punkt vorübergehend anzuhalten.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 Debuggerfeatures, wie Betrachtungsvariablenwerte im Fenster oder Auswertenausdrücke im Überwachungsfenster, sind nur im Unterbrechungsmodus verfügbar.Alle Elemente der App bleiben (verbleiben Funktionen, Variablen und Objekte im Arbeitsspeicher), aber ihre Bewegungen und Aktivitäten angehalten werden.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 Anpassungen an der App auch vornehmen im Unterbrechungsmodus

Sie können Haltepunkte konfigurieren, um die Ausführung auf Grundlage mehrerer Bedingungen aufzunehmen.Siehe Verwenden von Haltepunkten und Ablaufverfolgungspunkten.In diesem Abschnitt werden zwei grundlegende Methoden, in Code zu unterbrechen.

Legen Sie Haltepunkte im Code fest

Um einen einfachen Haltepunkt im Code festzulegen, öffnen Sie die Quelldatei im Visual Studio-Editor.Legen Sie den Cursor an der Codezeile, der Sie unterbrechen möchten an fest, und aktivieren Sie dann Haltepunkt, Haltepunkt einfügen im Kontextmenü (Tastatur aus: F9.Das Debugger-Unterbrechungsausführungsrecht vor der Zeile wird ausgeführt.

Haltepunkt festlegen

Haltepunkte in Visual Studio stellen einen, die von den zusätzlichen Funktionen, wie bedingte Haltepunkte und Ablaufverfolgungspunkte festgelegt werden.Siehe Verwenden von Haltepunkten und Ablaufverfolgungspunkten.

Manuell Unterbrechung in Code

Um in die nächste verfügbare Codezeile in einer ausgeführten App zu unterbrechen, wählen Sie Debuggen, Alle unterbrechen (Tastatur: Ctrl+Alt+Break).

  • Wenn Sie mit dem gerechten My aktiviert Codeoption debuggen, unterbrechen Sie an der nächsten Codezeile im Projekt.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 Change the break behavior of multiple processes in diesem Thema.

  • Wenn Sie die Ausführung von Code ohne entsprechende Quell- oder des Symbols(.pdf) Dateien) unterbrechen, zeigt der Debugger Quelldateien nicht gefunden oder eine Seite Symbole nicht gefunden an, die Ihnen helfen können, die entsprechenden Dateien zu suchen.Siehe Suchen von Symbol (.pdb)-, Quell- und Binärdateien.

    Wenn Sie auf die unterstützenden Dateien nicht zugreifen können, können Sie die Assemblyanweisungen im Disassemblyfenster noch debuggen.

y740d9d3.collapse_all(de-de,VS.110).gifWenden Sie, über oder aus den Code bis

Eine der häufigsten Debugprozeduren ist das Stepping.Beim Stepping wird der Code zeilenweise ausgeführt.Wenn Sie die Ausführung, das Ausführen des Debuggers an einen Haltepunkt angepasst haben, können Sie drei Debuggen Menübefehle verwenden, Code in Einzelschritten auszuführen:

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 führt Einzelschritt die folgende Anweisung aus.

Prozedurschritt

F10

Wenn die Zeile einen Funktionsaufruf enthält, führt Prozedurschritt die aufgerufene Funktion, dann die und hält bei der ersten Codezeile innerhalb der aufrufenden Funktion aus.Andernfalls führt Einzelschritt die folgende Anweisung aus.

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 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!";
    
    Dim x As Integet = 42
    Dim s As String = "Not answered"
    If x = 42 Then s = "Answered!"
    

    Wenn Sie in dieser Zeile treten, behandelt der Debugger die Bedingung als ein Schritt und die Folge als andere (in diesem Beispiel, ist die Bedingung true).

y740d9d3.collapse_all(de-de,VS.110).gifAusführen bis zu einer angegebenen Position oder Funktion

Manchmal möchten Sie zu einem bestimmten Punkt im Code ausführen und dann die Ausführung ein.Wenn Sie einen Haltepunkt verfügen, der Stelle, wo Sie unterbrechen möchten, wählen Sie Debuggen, Debugging starten, wenn Sie das Debuggen nicht gestartet wurden, oder oder Debuggen, Weiter aus.(In beiden Fällen ist F5 die Tastenkombination).Der Debugger hält am nächsten Haltepunkt in der Ausführung des Codes auf.Wählen Sie Debuggen, Weiter aus, bis Sie den Haltepunkt erreicht, den gewünschten.Siehe Set breakpoints in the code in diesem Thema.

Sie können auch ausgeführt werden, wobei Sie den Cursor im Code-Editor eingefügt haben, oder Ausführung der angegebenen Funktion.

Ausführung zur Cursorposition

Um zur Cursorposition ausgeführt werden, platzieren Sie den Cursor auf eine ausführbare Codezeile in einem Quellcodefenster.Klicken Sie im Kontextmenü des Editors wählen Sie Ausführen bis Cursor aus.

Führen Sie zu einer Funktion in der Aufrufliste ausgeführt

Im Fenster Aufrufliste wählen Sie die Funktion aus und wählen Sie im Kontextmenü aus. Ausführen bis Cursor

Führen Sie für eine Funktion ausgeführt, die nach angegeben wird

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

So fügen Sie eine Funktion über den Namen angeben, Debuggen, Neuer Haltepunkt, Halten bei Funktion wählen, den Namen der Funktion und anderer auch dann einzugeben.

Dialogfeld "Neuer Haltepunkt"

Wenn die Funktion überladen ist oder in mehreren Namespace handelt, können Sie die Funktionen auswählen, die Sie im Dialogfeld Haltepunkte wählen soll.

Dialogfeld "Haltepunkte wählen"

y740d9d3.collapse_all(de-de,VS.110).gifLegen Sie die folgende Anweisung fest, die Ausführung

Nachdem Sie den Debugger unterbrochen wird, 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 Anweisung, um auszuführen, verwenden eine dieser Prozeduren:

  • In einem Quellcodefenster ziehen Sie die gelbe Pfeilspitze an einen Speicherort, an dem Sie die folgende Anweisung in derselben Quelldatei festlegen möchten

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

  • im Disassemblyfenster legen Sie den Cursor in der Assemblyanweisung fest, die Sie als Nächstes ausführen und Nächste Anweisung festlegen im Kontextmenü auswählen möchten.

WarnhinweisVorsicht

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++, bei aktivierter Laufzeitprüfung dazu führen, kann das Festlegen der nächsten Anweisung eine Ausnahme ausgelöst werden, dass am Ende der - Methode erreicht.

  • Wenn Bearbeiten und Fortfahren aktiviert ist, schlägt Nächste Anweisung festlegen aus, wenn Sie Änderungen vorgenommen haben, die Bearbeiten und Fortfahren nicht sofort neu zuordnen können.Dies kann auftreten, wenn Sie z. B. Code in einem catch-Block bearbeitet haben.Wenn dies geschieht.Sie sehen eine Fehlermeldung, die Ihnen mitteilt, dass der Vorgang nicht unterstützt wird.

HinweisHinweis

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.

y740d9d3.collapse_all(de-de,VS.110).gifRestrict schrittweise zu Nur mein Code

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.

Um Nur mein Code-Debuggen zu aktivieren oder zu deaktivieren, wählen Sie Debuggen, Optionen und Einstellungen.Klicken Sie auf Debugging überprüfen Seite Allgemein, oder deaktivieren Nur meinen Code aktivieren.

Um Benutzercode von nicht-benutzerseitigem Code zu unterscheiden, Nur mein Code sieht Dateien des TLSATCHAR-Zeichens (PDB) und Programmoptimierungen.

Bei einem standardmäßigen Debugbuild ist die Optimierung deaktiviert, und es werden Debugsymbole für alle Module erstellt.Bei der Ausführung eines Debugbuilds werden diese Module als Bestandteil des Benutzercodes angesehen.Die Definition einer Bibliotheksfunktion, die keine Debugsymbole enthält, wird nicht als Benutzercode.Nur mein Code verhindert, dass die Ausführung an Haltepunkten im Bibliothekscode angehalten wird. Normalerweise ist dies Code, der beim Debuggen nicht relevant ist.Im Fenster Haltepunkte werden diese Haltepunkte mit dem Symbol für deaktivierte Haltepunkte angezeigt.

Um den gesamten Code anzuzeigen und an allen Haltepunkten anzuhalten, können Sie Nur mein Code über das Dialogfeld Optionen verwenden.

Drei Attribute beeinflussen den Code, den der Debugger für eigenen Code erachtet: DebuggerNonUserCodeAttribute teilt dem Debugger mit, dass der vorliegende Code kein eigener Code ist.DebuggerHiddenAttribute blendet den Code für den Debugger aus, auch wenn Nur mein Code deaktiviert wird.DebuggerStepThroughAttribute veranlasst den Debugger, den vorliegenden Code nicht in Einzelschritten, sondern in Prozedurschritten zu durchlaufen.

Wenn Nur mein Code aktiviert ist, können Sie Alle unterbrechen auf dem Menü Debuggen auswählen und die Ausführung an einem Speicherort beenden, in dem kein Mein Code vorhanden ist.In diesem Fall wird kein Code angezeigt.Wenn Sie außerdem einen Schritt-Befehl auswählen, gelangen Sie zur nächsten Zeile von Mein Code.

Programmgesteuerte Break-Anweisungen (z. B. Stop-Anweisungen in Visual Basic) werden unterschiedlich behandelt.Der Debugger wird bei diesen Anweisungen immer unterbrochen, auch dann, wenn Nur mein Code aktiviert ist.In diesem Fall wird kein verborgener, sondern nicht-benutzerseitiger Code angezeigt, aber durch die schrittweise Ausführung gelangen Sie nach wie vor vom nicht-benutzerseitigen Code zur nächsten Zeile von Mein Code.

HinweisHinweis

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

y740d9d3.collapse_all(de-de,VS.110).gifSchritt in Systemaufrufe

Wenn Sie über Debugsymbole für den Systemcode geladen haben und Nur mein Code nicht aktiviert ist, können Sie einen Systemaufruf, ebenso wie jeden anderen Aufruf können.

Wie Sie Nur mein Code, finden Sie unter Restrict stepping to Just My Code deaktiviert

Um auf Microsoft-Symboldateien zugreifen, finden Sie unter Verwenden von Windows und anderer Microsoft-SymboleSuchen von Symbol (.pdb)-, Quell- und Binärdateien im Thema.

Damit Symbole für eine bestimmte Systemkomponente laden, während Sie debuggen:

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

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

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

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

y740d9d3.collapse_all(de-de,VS.110).gifWenden Sie in Eigenschaften und Operatoren in verwaltetem Code

Die Debuggerschritte über Eigenschaften und Operatoren in verwaltetem Code standardmäßig.In den meisten Fällen stellt dieses eine bessere Debugleistung.Um die schrittweise Ausführung von Eigenschaften oder Operatoren zu aktivieren, wählen Sie Debuggen, Optionen und Einstellungen.Klicken Sie auf Debugging löschen Seite Allgemein, das Kontrollkästchen Eigenschaften und Operatoren überspringen (nur verwaltet)

In diesem Thema

Den Debugvorgang beenden

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.Das Trennen von einem Prozess abgebrochen, den Prozess jedoch die Blätter zu debuggen es ausgeführt.

Den Debugvorgang beenden von Visual Studio

Wählen Sie Debuggen, Debuggen beenden aus.

Debuggen beenden beendet den Prozess, den Sie debuggen, wenn das Programm von Visual Studio gestartet wurde.Wenn Sie den Prozess angefügt wurde, anstatt zu starten, es von Visual Studio, wird der Prozess weiter ausgeführt.

Den Debugvorgang beenden und -Neustart

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

Schließen Sie die Anwendung, die gedebuggt wird

Wenn Sie eine Anwendung beenden, die gedebuggt wird, wird das Debuggen automatisch auf.