Produktivitätstipps und Tricks für den Debugger in Visual Studio

Lesen Sie dieses Thema, um einige Produktivitätstipps und Tricks für den Visual Studio-Debugger kennenzulernen. Einblicke in die grundlegenden Funktionen des Debuggers finden Sie unter Erster Einblick in den Debugger. In diesem Thema werden einige Aspekte behandelt, die nicht in der Featuretour enthalten sind.

Tastenkombinationen

Eine Liste der gängigsten Tastenkombinationen im Zusammenhang mit dem Debuggen finden Sie im Abschnitt Debuggen unter „Tastenkombinationen“.

Anheften von Datentipps

Wenn Sie während des Debuggens häufig auf Datentipps zeigen, sollten Sie den Datentipp für die Variable anheften, um sich schnellen Zugriff zu verschaffen. Die Variable bleibt auch nach einem Neustart angeheftet. Um den Datentipp anzuheften, klicken Sie auf das Anheftsymbol, während Sie darauf zeigen. Sie können mehrere Variablen anheften.

Anheften eines Datentippfensters

Sie können Datentipps auch auf verschiedene andere Arten anpassen, z. B. einen Datentipp aufgeklappt lassen (ein haftender Datentipp) oder einen Datentipp transparent machen. Weitere Informationen finden Sie unter Anzeigen von Datenwerten im Code-Editor als Datentipps.

Bearbeiten des Codes und Fortsetzen des Debuggens (C#, VB, C++)

In den meisten Sprachen, die von Visual Studio unterstützt werden, können Sie den Code während einer Debugsitzung bearbeiten und das Debuggen fortsetzen. Wenn Sie dieses Feature verwenden möchten, klicken Sie mit dem Cursor auf den Code, während dieser im Debugger angehalten wurde, und bearbeiten Sie diesen. Drücken Sie F5, F10 oder F11, um das Debuggen fortzusetzen.

Bearbeiten und Debuggen fortsetzen

Weitere Informationen zur Verwendung des Features finden Sie unter Bearbeiten und Fortsetzen.

Bearbeiten von XAML-Code und Fortsetzen des Debuggens

Weitere Informationen zum Ändern von XAML-Code während einer Debugsitzung finden Sie unter Schreiben und Debuggen von ausgeführtem XAML-Code durch Neuladen von XAML im laufenden Betrieb.

Debuggen von Problemen, die schwer zu reproduzieren sind

Wenn es schwierig oder zeitaufwändig ist, einen bestimmten Status in Ihrer App zu reproduzieren, überlegen Sie, ob die Verwendung eines bedingten Breakpoints hilfreich sein kann. Sie können bedingte Breakpoints verwenden und Breakpoints filtern, um das Unterbrechen des App-Codes zu vermeiden, bis die App in den gewünschten Zustand wechselt (z. B. in einen Zustand, in dem eine Variable ungültige Daten speichert). Sie können Bedingungen mithilfe von Ausdrücken, Filtern, Trefferanzahlen usw. festlegen.

So erstellen Sie einen bedingten Breakpoint

  1. Klicken Sie mit der rechten Maustaste auf ein Breakpointsymbol (die rote Kugel), und wählen Sie Bedingungen aus.

  2. Geben Sie im Fenster Breakpointeinstellungen einen Ausdruck ein.

    Bedingter Breakpoint

  3. Wenn Sie an einer anderen Art von Bedingung interessiert sind, wählen Sie im Dialogfeld Breakpointeinstellungen die Option Filter anstelle von Bedingter Ausdruck aus, und befolgen Sie dann die Filtertipps.

Konfigurieren der Daten, die im Debugger angezeigt werden sollen

Für C#, Visual Basic und C++ (nur C++/CLI-Code) können Sie dem Debugger über das Attribut DebuggerDisplay mitteilen, welche Informationen angezeigt werden sollen. Für C++ Code können Sie zu diesem Zweck Natvis-Visualisierungen verwenden.

Wiederholtes Anfügen an dieselbe Anwendung

Wenn Sie das Feature An Prozess anfügen verwenden, können Sie schnell wieder an einen Prozess anfügen, an den Sie zuvor angefügt haben, indem Sie Debuggen>Erneut an Prozess anfügen (Umschalt+Alt+P) auswählen. Wenn Sie diesen Befehl auswählen, versucht der Debugger sofort, an den letzten Prozess, an den Sie angehängt haben, anzuhängen, indem er zuerst versucht, die vorherige Prozess-ID und, falls das nicht erfolgreich ist, den vorherigen Prozessnamen abzugleichen. Wenn keine Übereinstimmungen gefunden werden oder wenn mehrere Prozesse denselben Namen aufweisen, wird das Dialogfeld An den Prozess anhängen geöffnet, damit Sie den richtigen Prozess auswählen können.

Nachverfolgen eines Objekts außerhalb des Bereichs (C#, Visual Basic)

Es ist einfach, Variablen mit Debuggerfenstern anzuzeigen, etwa mit dem Überwachungsfenster. Wenn eine Variable jedoch den Bereich im Überwachungsfenster verlässt, werden Sie möglicherweise bemerken, dass sie ausgegraut angezeigt wird. In einigen App-Szenarien kann sich der Wert einer Variablen ändern, selbst wenn die Variable außerhalb des Bereichs liegt, und Sie möchten sie vielleicht genau beobachten (z. B. kann für eine Variable Garbage Collection ausgeführt werden). Sie können die Variable nachverfolgen, indem Sie im Überwachungsfenster eine Objekt-ID für sie erstellen.

So erstellen Sie eine Objekt-ID

  1. Legen Sie einen Breakpoint in der Nähe einer Variablen fest, die Sie nachverfolgen möchten.

  2. Starten Sie den Debugger (F5), und halten Sie am Breakpoint an.

  3. Suchen Sie die Variable im Fenster Lokale Variablen (Debuggen > Windows > Lokale Variablen), klicken Sie mit der rechten Maustaste auf die Variable, und wählen Sie dann Objekt-ID erstellen aus.

    Erstellen einer Objekt-ID

  4. Sie sollten ein $ und eine Zahl im Lokalfenster einen Haltepunkt festlegen. Diese Variable ist die Objekt-ID.

  5. Klicken Sie mit der rechten Maustaste auf die Objekt-ID-Variable, und wählen Sie Überwachung hinzufügen aus.

Weitere Informationen finden Sie unter Erstellen einer Objekt-ID.

Anzeigen von Rückgabewerten für Funktionen

Wenn Sie Rückgabewerte für Ihre Funktionen anzeigen möchten, untersuchen Sie die Funktionen, die im Fenster Auto angezeigt werden, während Sie den Code schrittweise durchlaufen. Wenn Sie den Rückgabewert für eine Funktion anzeigen möchten, stellen Sie sicher, dass die Funktion, an der Sie interessiert sind, bereits ausgeführt wurde (drücken Sie ein Mal F10, wenn Sie die Ausführung aktuell beim Funktionsaufruf angehalten haben). Wenn das Fenster geschlossen ist, verwenden Sie Debuggen > Windows > Auto, um das Fenster Auto zu öffnen.

Auto-Fenster

Außerdem können Sie Funktionen in das Fenster Direkt eingeben, um Rückgabewerte anzuzeigen. (Öffnen Sie es mit Debuggen > Windows > Direkt.)

Direktfenster

Sie können auch Pseudovariablen im Fenster Überwachung und Direkt (z. B. $ReturnValue) verwenden.

Untersuchen von Zeichenfolgen in einer Schnellansicht

Beim Arbeiten mit Zeichenfolgen kann es hilfreich sein, die gesamte formatierte Zeichenfolge anzuzeigen. Um eine Nur-Text-, XML-, HTML- oder JSON-Zeichenfolge anzuzeigen, klicken Sie auf das Lupensymbol VisualizerIcon, während Sie auf eine Variable mit einem Zeichenfolgenwert zeigen.

Öffnen einer Zeichenfolgenschnellansicht

Mithilfe einer Zeichenfolgenschnellansicht können Sie abhängig vom Typ der Zeichenfolge ermitteln, ob eine Zeichenfolge falsch formatiert ist. Beispielsweise gibt ein leeres Feld Wert an, dass die Zeichenfolge vom Typ der Schnellansicht nicht erkannt wird. Weitere Informationen finden Sie unter Dialogfeld „Zeichenfolgenschnellansicht“.

JSON-Zeichenfolgenschnellansicht

Für einige andere Typen (z. B. DataSet- und DataTable-Objekte), die in den Debuggerfenstern angezeigt werden, können Sie auch eine integrierte Schnellansicht öffnen.

Analysieren der Speicherauslastung

Sie können Momentaufnahmen des Heaps erstellen und vergleichen, die Speicherauslastung optimieren und einen Speicherverlust mithilfe von Tools zur Speicherauslastung ermitteln. Weitere Informationen finden Sie unter Auswählen eines Speicheranalysetools.

Erstellen einer Dumpdatei

Bei einer Speicherabbilddatei handelt es sich um eine Momentaufnahme, die den Prozess anzeigt, der ausgeführt wurde, sowie die Module, die zu einem bestimmten Zeitpunkt für eine App geladen wurden. Ein Speicherabbild mit Heapinformationen enthält außerdem eine Momentaufnahme des Arbeitsspeichers der App zu diesem Zeitpunkt. Speicherabbilder werden hauptsächlich dazu verwendet, Probleme auf Computern zu debuggen, auf die Entwickler keinen Zugriff haben.

Wenn Sie eine Speicherabbilddatei speichern müssen, wählen Sie Debuggen > Speicherabbild speichern unter aus.

Um eine Speicherabbilddatei zu analysieren, wählen Sie in Visual Studio Datei > Öffnen aus. Klicken Sie zum Starten des Debuggens auf Debuggen mit „Nur verwaltet“, Debuggen mit „Nur systemeigen“, Debuggen mit „Gemischt“ oder Debuggen mit verwaltetem Speicher.

Weitere Informationen finden Sie unter Speicherabbilddateien.

Unterbrechen des Codes für behandelte Ausnahmen

Der Debugger unterbricht den Code bei nicht behandelten Ausnahmen. Behandelte Ausnahmen (z. B. Ausnahmen, die in einem try/catch-Block auftreten) können jedoch auch eine Fehlerquelle sein, die Sie möglicherweise bei ihrem Auftreten untersuchen möchten. Sie können den Debugger auch so konfigurieren, dass er Code für behandelte Ausnahmen unterbricht, indem Sie Optionen im Dialogfeld Ausnahmeeinstellungen konfigurieren. Öffnen Sie dieses Dialogfeld, indem Sie Debuggen > Windows > Ausnahmeeinstellungen auswählen.

Im Dialogfeld Ausnahmeeinstellungen können Sie den Debugger anweisen, den Code bei bestimmten Ausnahmen zu unterbrechen. In der Abbildung unten unterbricht der Debugger den Code immer dann, wenn eine System.NullReferenceException auftritt. Weitere Informationen finden Sie unter Verwalten von Ausnahmen.

Dialogfeld „Ausnahmeeinstellungen“

Ändern des Ausführungsablaufs

Wenn der Debugger in einer Codezeile angehalten wurde, verwenden Sie die Maus, um den gelben Pfeilzeiger auf der linken Seite zu erfassen. Bewegen Sie den gelben Pfeilzeiger an einen anderen Punkt im Codeausführungspfad. Anschließend verwenden Sie F5 oder einen Schrittbefehl, um die Ausführung der App fortzusetzen.

Verschieben des Ausführungszeigers

Durch Ändern des Ausführungsablaufs können Sie Aktionen ausführen wie das Testen verschiedener Pfade für die Codeausführung oder das erneute Ausführen von Code ohne Neustarten des Debuggers. Weitere Informationen finden Sie unter Verschieben des Ausführungszeigers.

Warnung

Bei dieser Funktion müssen Sie häufig vorsichtig vorgehen. Sie werden durch eine Warnung in der QuickInfo auf Probleme aufmerksam gemacht. Möglicherweise werden Ihnen auch andere Warnungen angezeigt. Durch das Verschieben des Zeigers kann Ihre App nicht auf einen früheren Anwendungsstatus zurückgesetzt werden.

Debuggen von Deadlocks und Racebedingungen

Wenn Sie die Arten von Problemen debuggen müssen, die bei Multithreadanwendungen häufig vorkommen, ist es manchmal hilfreich, den Speicherort der Threads während des Debuggens anzuzeigen. Dies ist problemlos möglich, indem Sie die Schaltfläche Threads in Quelle anzeigen verwenden.

So zeigen Sie Threads in Ihrem Quellcode an:

  1. Klicken Sie beim Debuggen in der Symbolleiste Debuggen auf die Schaltfläche Threads in Quelle anzeigenThreads in Quelle anzeigen.

  2. Betrachten Sie den Bundsteg auf der linken Seite des Fensters. In dieser Zeile sehen Sie ein Tthreadmarker-Symbol Threadmarker, das zwei Fäden ähnelt. Der Threadmarker gibt an, dass ein Thread an dieser Position angehalten wurde.

    Beachten Sie, dass ein Threadmarker möglicherweise teilweise durch einen Breakpoint verdeckt wird.

  3. Zeigen Sie mit dem Mauszeiger auf den Threadmarker. Ein DataTip wird angezeigt. Anhand des DataTips erfahren Sie den Namen und die Thread-ID jedes angehaltenen Threads.

    Sie können den Speicherort der Threads auch im Fenster Parallele Stapel anzeigen.

Informieren Sie sich darüber, wie der Debugger an Ihre App angefügt wird (C#, C++, Visual Basic, F#)

Zum Anfügen an die aktuell ausgeführte App lädt der Debugger Symboldateien (PDB-Dateien), die für genau denselben Build der App generiert werden, die Sie debuggen möchten. In einigen Szenarien können Kenntnisse zu Symboldateien hilfreich sein. Sie können untersuchen, wie Visual Studio Symboldateien lädt, indem Sie das Fenster Module verwenden.

Öffnen Sie während des Debuggens das Fenster Module, indem Sie Debuggen > Windows > Module auswählen. Im Fenster Module können Sie feststellen, welche Module der Debugger als Benutzercode oder als eigenen Code behandelt. Außerdem wird der Symbolladestatus für das Modul angegeben. In den meisten Szenarien findet der Debugger automatisch Symboldateien für Benutzercode, aber wenn Sie .NET-Code, Systemcode oder Bibliothekscode von Drittanbietern schrittweise durchlaufen (oder debuggen) möchten, sind zusätzliche Schritte erforderlich, um die richtigen Symboldateien abzurufen.

Anzeigen von Symbolinformationen im Fenster „Module“

Sie können Symbolinformationen direkt aus dem Fenster Module laden, indem Sie mit der rechten Maustaste klicken dann und Symbole laden auswählen.

Manchmal liefern App-Entwickler Apps ohne die passenden Symboldateien aus (um den Speicherbedarf zu verringern), behalten jedoch eine Kopie der passenden Symboldateien für den Build, damit sie eine veröffentlichte Version später debuggen können.

Informationen dazu, wie der Debugger Code als Benutzercode klassifiziert, finden Sie unter Nur eigenen Code. Weitere Informationen zu Symboldateien finden Sie unter Angeben von Symbol- (PDB-Dateien) und Quelldateien im Visual Studio Debugger.

Weitere Informationen

Weitere Tipps und Tricks sowie ausführlichere Informationen finden Sie in den folgenden Blogbeiträgen:

Tastenkombinationen