Freigeben über


Anzeigen von Threads und Aufgaben im Fenster „Parallele Stapel“ (C#, Visual Basic, C++)

Das Fenster "Parallel Stacks" ist für die Fehlerbehebung von Multithread-Anwendungen nützlich. Das Fenster enthält mehrere Ansichten:

  • In der Threadansicht werden Informationen zur Aufrufliste für alle Threads in der App angezeigt. Sie können zwischen Threads und Stapelrahmen in diesen Threads navigieren.
  • In der Taskansicht werden taskorientierte Aufruflisteninformationen angezeigt.
    • Für .NET-Apps, die das asynchrone/await-Muster verwenden, ist die Aufgabenansicht für das Debuggen am hilfreichsten. Eine schrittweise Anleitung finden Sie unter Debuggen einer asynchronen Anwendung.
    • Für Apps, die die Task Parallel Library (TPL) verwenden, aber nicht das asynchrone/await-Muster oder für C++-Apps, die die Parallelitätslaufzeit verwenden, ist die Threads-Ansicht im Fenster "Parallele Stapel" das nützlichste Tool zum Debuggen.
  • In der Taskansicht werden taskorientierte Aufruflisteninformationen angezeigt.
    • Für .NET-Apps, die das asynchrone/await-Muster verwenden, ist die Aufgabenansicht für das Debuggen am hilfreichsten.
    • Für Apps, die die Task Parallel Library (TPL) verwenden, aber nicht das asynchrone/await-Muster oder für C++-Apps, die die Parallelitätslaufzeit verwenden, ist die Threads-Ansicht im Fenster "Parallele Stapel" das nützlichste Tool zum Debuggen.
  • In der Methodenansicht wird die Aufrufliste einer ausgewählten Methode pivotiert.

Verwenden des Fensters „Parallele Stapel“

Zum Öffnen des Fensters "Parallel Stacks" müssen Sie sich in einer Debugsitzung befinden. Wählen Sie Debuggen>Fenster>Parallele Stapel aus.

Symbolleisten-Steuerelemente

Das Fenster Parallele Stapel enthält die folgenden Symbolleisten-Steuerelemente:

Screenshot der Symbolleiste im Fenster „Parallele Stapel“

Symbol Steuerelement Beschreibung
kombinationsfeld Kombinationsfeld „Threads/Tasks“ Kombinationsfeld Threads/Aufgaben Schaltet die Ansicht zwischen Aufruflisten von Threads und Aufruflisten von Aufgaben um. Weitere Informationen finden Sie in Aufgabenansicht und Threadsansicht.
Symbol „Nur gekennzeichnete Elemente anzeigen“ Nur gekennzeichnete Elemente anzeigen Mit dieser Option werden nur Aufruflisten für die Threads angezeigt, die in anderen Debuggerfenstern wie den Fenstern GPU-Threads und Parallele Überwachung gekennzeichnet wurden.
Symbol „Methodenansicht umschalten“ Methodenansicht umschalten Mit dieser Option können Sie zwischen der Aufruflistenansicht und der Methodenansicht wechseln. Weitere Informationen finden Sie unter Methodenansicht.
Automatisches Scrollen zum aktuellen Element Automatisches Scrollen zu aktuellem Stapelrahmen durchführen Mit dieser Option können Sie im Graph automatisch zum aktuellen Stapelrahmen scrollen. Dieses Feature ist nützlich, wenn Sie den aktuellen Stack-Frame aus anderen Fenstern ändern oder wenn Sie einen neuen Haltepunkt in großen Graphen erreichen.
Symbol „Zoom umschalten“ Zoomsteuerung umschalten Mit dieser Option wird das Zoomsteuerelement auf der linken Seite des Fensters ein- und ausgeblendet.

Unabhängig von der Sichtbarkeit des Zoomsteuerelements können Sie auch zoomen, indem Sie STRG- drücken und das Mausrad drehen, oder indem Sie STRG-+UMSCHALT-++ zum Vergrößern und STRG-+UMSCHALT-+- zum Verkleinern drücken.

Screenshot der Symbolleiste im Fenster „Parallele Stapel“ 2022

Symbol Steuerelement Beschreibung
kombinationsfeld Kombinationsfeld „Threads/Tasks“ Kombinationsfeld Threads/Aufgaben Schaltet die Ansicht zwischen Aufruflisten von Threads und Aufruflisten von Aufgaben um. Weitere Informationen finden Sie in Aufgabenansicht und Threadsansicht.
Symbol „Filter“ Filter-Steuerelement Mit dieser Option zeigen Sie die Aufruflisten nur für die gewünschte Gruppe von Threads an.
Symbol „Nur gekennzeichnete Elemente anzeigen“ Nur gekennzeichnete Elemente anzeigen Mit dieser Option werden nur Aufruflisten für die Threads angezeigt, die in anderen Debuggerfenstern wie den Fenstern GPU-Threads und Parallele Überwachung gekennzeichnet wurden.
Symbol „Methodenansicht umschalten“ Methodenansicht umschalten Mit dieser Option können Sie zwischen der Aufruflistenansicht und der Methodenansicht wechseln. Weitere Informationen finden Sie unter Methodenansicht.
Automatisches Scrollen zum aktuellen Element Automatisches Scrollen zu aktuellem Stapelrahmen durchführen Mit dieser Option können Sie im Graph automatisch zum aktuellen Stapelrahmen scrollen. Dieses Feature ist nützlich, wenn Sie den aktuellen Stack-Frame aus anderen Fenstern ändern oder wenn Sie einen neuen Haltepunkt in großen Graphen erreichen.
Symbol „Zoom umschalten“ Zoomsteuerung umschalten Mit dieser Option wird das Zoomsteuerelement auf der linken Seite des Fensters ein- und ausgeblendet.

Unabhängig von der Sichtbarkeit des Zoomsteuerelements können Sie auch zoomen, indem Sie STRG- drücken und das Mausrad drehen, oder indem Sie STRG-+UMSCHALT-++ zum Vergrößern und STRG-+UMSCHALT-+- zum Verkleinern drücken.
Suchsymbol Suchsteuerung Mit dieser Funktion können Sie einfach Stapelrahmen durchsuchen und dann Pfeile verwenden, um zwischen diesen Ergebnissen zu navigieren.
Symbol „Speichern“ Steuerelement „Speichern“ Diese Option ermöglicht das Speichern/Exportieren des Inhalts aus dem Fenster mit parallelen Stapeln als Bild.
Symbol „Externer Code“ Externe Codekontrolle anzeigen Mit diesem Feature können Sie die Stapel im externen Code und in externen Bibliotheken ein- und ausblenden.
Symbol „Copilot-Zusammenfassung“ Zusammenfassen von Aufruflisten Ab Visual Studio 2022, Version 17.13 Preview 4, können Sie Zusammenfassen auswählen, wenn Copilot installiert und aktiviert ist. Mit dieser Schaltfläche wird das Copilot-Chatfenster geöffnet, das bereits mit dem relevanten Threadkontext geladen wurde, sodass Sie Details untersuchen können, einschließlich Threadzuständen, Funktionsaufrufen und vorgeschlagenen Fixes.

Stack-Frame-Symbole

Die folgenden Symbole bieten Informationen zu den aktiven und aktuellen Stapelrahmen in allen Ansichten:

Symbol Beschreibung
Gelber Pfeil Dieses Symbol gibt die aktuelle Position (aktiver Stapelrahmen) des aktuellen Threads an.
Symbol Threadsymbol Gibt die aktuelle Position (aktives Stapelframe) eines nicht aktuellen Threads an.
Grüner Pfeil Gibt den aktuellen Stapelrahmen (den aktuellen Debuggerkontext) an. Der Methodenname wird immer fett formatiert.
Symbol Beschreibung
Gelber Pfeil Dieses Symbol gibt die aktuelle Position (aktiver Stapelrahmen) des aktuellen Threads an.
Symbol Threadsymbol Gibt die aktuelle Position (aktives Stapelframe) eines nicht aktuellen Threads an.
Grüner Pfeil Gibt den aktuellen Stapelrahmen (den aktuellen Debuggerkontext) an. Der Methodenname wird immer fett formatiert.
Status „Fehler“ (.NET) Gibt an, dass der aktuelle Stapelframe eine Warnung zum kritischen Status hat, z. B. Deadlock.
Status: Ausgeschlossen (.NET) Gibt den Deadlocked-Knoten an.
Statusinformationen (.NET) Gibt an, dass der aktuelle Stapelframe zusätzliche Informationen wie Warten auf, Warten auf Sperre, Besitz von usw. enthält.
Status „Blockiert“ (.NET) Gibt an, dass sich die aktuelle Aufgabe im Sperr-/Wartezustand befindet usw.
Status „Wird ausgeführt“ Gibt die aktuell ausgeführte Aufgabe an.

Kontextmenüelemente

Die folgenden Kontextmenüelemente sind verfügbar, wenn Sie mit der rechten Maustaste auf eine Methode in der Threads-Ansicht oder in der Aufgaben-Ansicht klicken. Die letzten sechs Elemente sind mit denen im Fenster Aufrufliste identisch.

Screenshot des Kontextmenüs im Fenster „Parallele Stapel“

Menüelement Beschreibung
Kennzeichnen Kennzeichnet das ausgewählte Element.
Kennzeichnung aufheben Entmarkiert das ausgewählte Element.
Einfrieren Friert das ausgewählte Element ein.
Auftauen Reaktiviert das ausgewählte Element.
Zu Rahmen wechseln Dieses Element ist identisch mit dem entsprechenden Menübefehl im Fenster Aufrufliste. Im Fenster "Parallele Stapel" kann sich eine Methode jedoch in mehreren Frames befinden. Sie können den Rahmen auswählen, der im untergeordneten Menü des Elements enthalten sein soll. Wenn sich einer der Stapelrahmen im aktuellen Thread befindet, wird dieser Rahmen standardmäßig im untergeordneten Menü ausgewählt.
Zu Aufgabe wechseln oder Zu Thread wechseln Mit diesem Menüelement wechseln Sie zwischen den Ansichten Task und Threads. Dabei wird derselbe Stapelrahmen hervorgehoben.
Gehe zu Quellcode Wechselt zum entsprechenden Ort im Quellcodefenster.
Gehe zu Demontage Mit diesem Menüelement navigieren Sie zur entsprechenden Position im Fenster Demontage.
Externen Code anzeigen Zeigt externen Code an oder blendet ihn aus.
Hexadezimale Anzeige Schaltet zwischen dezimaler und hexadezimaler Anzeige um.
Threads in der Quelle anzeigen Markiert den Speicherort des Threads im Quellcodefenster.
Symbolladeinformationen Öffnet das Dialogfeld Symbolladeinformationen.
Symboleinstellungen Öffnet das Dialogfeld Symboleinstellungen.

Screenshot des Kontextmenüs im Fenster „Parallele Stapel“ in Version 2022

Menüelement Beschreibung
Kopieren Kopiert das ausgewählte Element.
Alle Frames unterhalb von auswählen Wählt alle Rahmen unter dem ausgewählten Stapel aus.
Kennzeichnen Kennzeichnet das ausgewählte Element.
Kennzeichnung aufheben Entmarkiert das ausgewählte Element.
Einfrieren Friert das ausgewählte Element ein.
Auftauen Reaktiviert das ausgewählte Element.
Zu Rahmen wechseln Dieses Element ist identisch mit dem entsprechenden Menübefehl im Fenster Aufrufliste. Im Fenster "Parallele Stapel" kann sich eine Methode jedoch in mehreren Frames befinden. Sie können den Rahmen auswählen, der im untergeordneten Menü des Elements enthalten sein soll. Wenn sich einer der Stapelrahmen im aktuellen Thread befindet, wird dieser Rahmen standardmäßig im untergeordneten Menü ausgewählt.
Zu Aufgabe wechseln oder Zu Thread wechseln Mit diesem Menüelement wechseln Sie zwischen den Ansichten Task und Threads. Dabei wird derselbe Stapelrahmen hervorgehoben.
Gehe zu Quellcode Wechselt zum entsprechenden Ort im Quellcodefenster.
Gehe zu Demontage Mit diesem Menüelement navigieren Sie zur entsprechenden Position im Fenster Demontage.
Externen Code anzeigen Zeigt externen Code an oder blendet ihn aus.
Hexadezimale Anzeige Schaltet zwischen dezimaler und hexadezimaler Anzeige um.
Threads in der Quelle anzeigen Markiert den Speicherort des Threads im Quellcodefenster.
Symbolladeinformationen Öffnet das Dialogfeld Symbolladeinformationen.
Symboleinstellungen Öffnet das Dialogfeld Symboleinstellungen.

Threadansicht

In der Ansicht Threads werden der Stapelrahmen und der Aufrufpfad des aktuellen Threads blau hervorgehoben. Die aktuelle Position des Threads wird vom gelben Pfeil angezeigt.

Doppelklicken Sie auf eine andere Methode, um den aktuellen Stapelrahmen zu ändern. Dies kann auch zu einem Wechsel des aktuellen Threads führen, je nachdem, ob die ausgewählte Methode Teil des aktuellen oder eines anderen Threads ist.

Wenn der Graph der Ansicht Threads zu groß ist, um in das Fenster zu passen, wird im Fenster das Steuerelement Vogelperspektive angezeigt. Sie können den Rahmen im Steuerelement bewegen, um zu verschiedenen Abschnitten des Graphen zu navigieren.

Die folgende Abbildung zeigt den Hauptthread beim Übergang von verwaltetem zu nativem Code. In der aktuellen Methode befinden sich fünf Threads. Vier Threads werden weiterhin im S.C.-Methodenkontext ausgeführt, während ein Arbeitsthread in einem Übergang von verwaltetem zu nativem Code fortgesetzt wird und dabei der Name des Arbeitsthreads festgelegt wird.

Screenshot der Ansicht „Threads“ im Fenster „Parallele Stapel“ 2022

In der folgenden Tabelle werden die wichtigsten Funktionen der Ansicht Threads beschrieben.

Legende Elementname Beschreibung
1 Aufruflistensegment oder -knoten Dieses Element enthält eine Reihe von Methoden für einen oder mehrere Threads. Wenn keine Pfeillinien mit dem Rahmen verbunden sind, zeigt der Rahmen den gesamten Aufrufpfad für die Threads an.
2 Blaue Hervorhebung Gibt den Aufrufpfad des aktuellen Threads an.
3 Pfeillinien Verbinden Knoten, um den gesamten Aufrufpfad für den Thread bzw. die Threads darzustellen.
4 Knotenheader Zeigt die Anzahl der Prozesse/Threads, den Threadnamen und die Thread-ID für den Knoten an.
5 Methode Stellt einen oder mehrere Stapelrahmen in derselben Methode dar
6 QuickInfo zur Methode Wird angezeigt, wenn Sie auf eine Methode zeigen. In der Threadansicht zeigt die QuickInfo alle Threads in einer Tabelle ähnlich wie im Fenster Threads an.
7 Threadbeschreibung KI-generierte Beschreibung des Threads. Diese Beschreibung gibt es ab Visual Studio 2022, Version 17.13 Preview 1, wenn Copilot installiert und aktiviert ist.

KI-Unterstützung erhalten

Wenn Sie Copilot haben, können Sie KI-Unterstützung in der Threads-Ansicht mit KI-generierten Threadbeschreibungen und mithilfe der Schaltfläche " Insights generieren " erhalten. Verwenden Sie den Screenshot Schaltfläche, um mit Copilot über die angezeigten Threaddaten zu interagieren. In diesem Szenario kennt Copilot bereits den Kontext für Ihre Frage, sodass Sie sich nicht selbst im Chat kontextieren müssen. Weitere Informationen finden Sie unter "Debuggen mit Copilot".

Um Threadzusammenfassungsbeschreibungen zu aktivieren oder zu deaktivieren, öffnen Sie den Bereich Extras>Optionen und erweitern Sie den Abschnitt Alle Einstellungen>GitHub>Copilot>Debugger und Diagnose. Sie können das Kontrollkästchen „Aktivieren von KI-Zusammenfassungen im Parallelstapel-Fenster“ aktivieren oder deaktivieren.

Um Thread-Zusammenfassungsbeschreibungen zu aktivieren oder zu deaktivieren, öffnen Sie das Dialogfeld "Extras" und klappen Sie den Abschnitt "GitHub" Copilot auf. Aktivieren oder deaktivieren Sie in der Kategorie "Debugger und Diagnose " das Kontrollkästchen "KI-Zusammenfassung aktivieren" im Fenster "Parallel Stacks" .

In der folgenden Abbildung wird ein Thread gezeigt, der von der Main-Methode zu einem Übergang von verwaltetem zu nativem Code wechselt. In der aktuellen Methode befinden sich sechs Threads. Zwei Threads fahren mit Thread.Sleep fort, zwei weitere mit Console.WriteLine, und der aktuelle Thread fährt mit SyncTextWriter.WriteLine fort.

Screenshot der Ansicht „Threads“ im Fenster „Parallele Stapel“

In der folgenden Tabelle werden die wichtigsten Funktionen der Ansicht Threads beschrieben.

Legende Elementname Beschreibung
1 Aufruflistensegment oder -knoten Dieses Element enthält eine Reihe von Methoden für einen oder mehrere Threads. Wenn keine Pfeillinien mit dem Rahmen verbunden sind, zeigt der Rahmen den gesamten Aufrufpfad für die Threads an.
2 Blaue Hervorhebung Gibt den Aufrufpfad des aktuellen Threads an.
3 Pfeillinien Verbinden Knoten, um den gesamten Aufrufpfad für den Thread bzw. die Threads darzustellen.
4 Knotenheader Dieses Element zeigt die Anzahl der Prozesse und Threads für den Knoten an.
5 Methode Stellt einen oder mehrere Stapelrahmen in derselben Methode dar
6 QuickInfo zur Methode Wird angezeigt, wenn Sie auf eine Methode zeigen. In der Threadansicht zeigt die QuickInfo alle Threads in einer Tabelle ähnlich wie im Fenster Threads an.

Aufgabenansicht

Für .NET-Apps, die das asynchrone/await-Muster verwenden, ist die Aufgabenansicht für das Debuggen am hilfreichsten. Eine schrittweise Anleitung finden Sie unter Debuggen einer asynchronen Anwendung.

In der Ansicht "Aufgaben " haben Sie folgende Möglichkeiten:

  • Zeigen Sie Aufrufstapelvisualisierungen für Apps an, die das asynchrone/await-Muster verwenden.
  • Identifizieren Sie asynchronen Code, der für die Ausführung geplant ist, aber noch nicht ausgeführt wird.

In der folgenden Abbildung wird die Ansicht Threads oben und die dazugehörige Ansicht Tasks unten veranschaulicht.

Screenshot der Ansichten „Threads“ und „Aufgaben“

Screenshot der Aufgabenansicht im Fenster

Zeigen Sie mit der Maus auf eine Methode, um einen Tooltip mit zusätzlichen Informationen anzuzeigen. In der Aufgabenansicht zeigt das Tooltip alle Vorgänge in einer Tabelle an, die dem Fenster Aufgaben ähnelt.

In der folgenden Abbildung werden die QuickInfo für eine Methode in der Ansicht Threads oben und die dazugehörige Ansicht Tasks unten angezeigt.

Screenshot der QuickInfos „Threads“ und „Aufgaben“

Screenshot der QuickInfos „Threads“ und „Tasks“

Methodenansicht

Über die Ansichten Threads und Tasks können Sie den Graphen zur aktuellen Methode pivotieren, indem Sie auf der Symbolleiste auf das Symbol Methodenansicht umschalten klicken. Methodenansicht zeigt auf einen Blick alle Methoden aller Threads, die entweder die aktuelle Methode aufrufen oder von ihr aufgerufen werden. In der folgenden Abbildung wird veranschaulicht, wie die gleichen Informationen in der Ansicht Threads links und der Methodenansicht rechts dargestellt werden.

Screenshot der Ansicht „Methoden“ im Fenster „Parallele Stapel“

Screenshot der Ansicht „Methoden“ im Fenster „Parallele Stapel“ 2022

Wenn Sie zu einem neuen Stack-Frame wechseln, machen Sie diese Methode zur aktuellen Methode, und die Methodenansicht zeigt alle Aufrufer und Angerufenen für die neue Methode an. Dieses Szenario kann dazu führen, dass einige Threads in der Ansicht angezeigt oder ausgeblendet werden, je nachdem, ob diese Methode in ihren Aufrufstapeln angezeigt wird. Um zur Aufrufstapelansicht zurückzukehren, wählen Sie erneut das Symbol in der Methoden-Ansicht Symbolleiste aus.

Videotutorial zum Debuggen von Threads und Aufgaben mit parallelen Stapeln

Diese Videotutorials veranschaulichen, wie Sie die Ansichten „Threads“ und „Aufgaben“ des Fensters „Parallele Stapel“ in Visual Studio 2022 verwenden können, um Ihre Multithreadanwendungen zu debuggen.