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:

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 Dieses Symbol gibt die aktuelle Position (aktiver Stapelrahmen) von 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 Dieses Symbol gibt die aktuelle Position (aktiver Stapelrahmen) von nicht aktuellen Threads an.
Grüner Pfeil Gibt den aktuellen Stapelrahmen (den aktuellen Debuggerkontext) an. Der Methodenname wird immer fett formatiert.
Status „Fehler“ Gibt an, dass der aktuelle Stapelrahmen eine Warnung zu einem kritischen Status wie aufweist, etwa einem Deadlock
Status: Ausgeschlossen Gibt den blockierten Knoten an.
Statusinformationen Gibt an, dass der aktuelle Stapelrahmen zusätzliche Informationen enthält, z. B. „Warten auf“, „Warten auf Sperre“, „Im Besitz von“ usw.
Status „Blockiert“ Gibt an, dass sich die aktuelle Aufgabe im Status „Blockiert“, „Warten“ usw. befindet.
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
Flag 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 Rahmen 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.
Flag 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 Rahmen 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 Mit diesem Menüelement wird das Dialogfeld Symboleinstellungen geöffnet.

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.

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.

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.

Aufgabenansicht

Wenn Ihre App System.Threading.Tasks.Task-Objekte (verwalteter Code) oder task_handle-Objekte (nativer Code) verwendet, um Parallelität auszudrücken, können Sie die Ansicht Aufgaben verwenden. In der Ansicht Aufgaben werden Aufruflisten von Aufgaben anstelle von Threads angezeigt.

In der Ansicht Tasks:

  • werden Aufruflisten von Threads nicht angezeigt, die keine Aufgaben ausführen.
  • werden Aufruflisten von Threads, die Aufgaben ausführen, oben und unten abgeschnitten, um die relevantesten Rahmen für Aufgaben anzuzeigen.
  • werden die Aufruflisten dieser Aufgaben in separaten Knoten angezeigt, wenn sich mehrere Aufgaben in einem Thread befinden.

Wechseln Sie zurück zur Ansicht Threads, indem Sie mit der rechten Maustaste in einen Stapelrahmen klicken und Zu Thread wechseln auswählen, um die gesamte Aufrufliste anzuzeigen.

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. Dabei werden möglicherweise einige Threads in der Ansicht ein- oder ausgeblendet, je nachdem, ob die betreffende Methode in ihren Aufruflisten enthalten ist. 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.