Freigeben über


Anzeigen von Threads im Visual Studio-Debugger (C#, Visual Basic, C++)

Mit dem Threads Fenster im Visual Studio-Debugger können Sie Threads in der Anwendung untersuchen und bearbeiten, die Sie debuggen. Das Fenster bietet Features zum Gruppieren, Sortieren, Kennzeichnen, Fixieren, Auftauen und Suchen nach Threads in Ihrem Code und Anzeigen von Aufrufstapeln.

Das Fenster Threads ist nur verfügbar, während der Visual Studio-Debugger ausgeführt wird. Während einer Debugsitzung können Sie das Fenster öffnen, indem Sie Debuggen>Windows>Threadsauswählen.

In diesem Artikel wird beschrieben, wie Sie mit den Threads Fenster für Ihre C#-, Visual Basic- oder C++-Programme arbeiten. Wenn Sie eine schrittweise Anleitung zur Verwendung des Fensters Threads suchen, lesen Sie Anleitung: Debugging mit dem Threads-Fenster.

Untersuchen Sie die Tabelle im Fenster "Threads"

Das fenster Threads stellt eine Tabelle dar, in der jede Zeile einem separaten Thread in Ihrer Anwendung entspricht. In der Standardansicht zeigt die Tabelle alle Threads in Ihrer Anwendung an. Sie können die Tabelleneinstellungen so konfigurieren, dass nur die Threads angezeigt werden, die Sie interessieren. Die Tabelle stellt mehrere Spalten bereit, um die Threads detailliert zu beschreiben. Sie können die Spaltenplatzierung anpassen und unnötige Spalten ausblenden.

Die folgende Tabelle beschreibt alle verfügbaren Spalten für die Threads Fenstertabelle und gibt an, ob die Spalte in der Standardansicht sichtbar oder ausgeblendet ist. Die Spalten werden entsprechend ihrer Standardtabellenposition von links nach rechts aufgelistet.

Spalte Standard Beschreibung
Kennzeichnen Sichtbar, unbeschriftet Rote Kennzeichnungen in dieser Spalte zeigen Threads an, die für besondere Aufmerksamkeit gekennzeichnet sind. Wählen Sie die Flagge (Symbol färbt sich rot) aus, um einen Thread zu markieren oder die Markierung aufzuheben (Symbol ändert sich in eine Flaggenumriss). Das farbige Kennzeichnungssymbol hilft, einen markierten Thread von anderen Threads in der Tabelle zu unterscheiden. Weitere Informationen finden Sie unter Kennzeichnen von Threads und Aufheben der Kennzeichnung.
aktueller Thread Sichtbar, unbeschriftet Das gelbe Pfeilsymbol in dieser Spalte gibt den aktuellen Thread in der Anwendung an, die im Debugger ausgeführt wird. Ein Pfeilkontursymbol in dieser Spalte gibt den aktuellen Debuggerkontext für einen nicht aktuellen Thread an.
ID Sichtbar Stellt die Identifikationsnummer für jeden Thread bereit.
Verwaltete ID Sichtbar Zeigt die verwalteten Identifikationsnummern für verwaltete Threads an.
Kategorie Sichtbar Gibt die Kategorie von Threads als Benutzeroberflächenthreads, Remoteprozeduraufrufhandler oder Arbeitsthreads an. Eine spezielle Kategorie identifiziert den Hauptthread der Anwendung.
Name Sichtbar Identifiziert jeden Thread anhand seines Namens oder <"Kein Name">, wenn der Thread keinen angegebenen Namen hat. Wenn ein Thread nicht mehr vorhanden ist, hat der Thread die Bezeichnung [Thread Zerstört].
Ort Sichtbar Zeigt an, wo der Thread innerhalb des Anwendungsaufrufstapels ausgeführt wird. Wählen Sie den Dropdownpfeil aus, um den vollständigen Aufrufstapel für den Thread anzuzeigen. Wenn kein Thread mehr vorhanden ist, wird der Speicherort als <nicht verfügbar> bezeichnet.
Priorität Versteckt Zeigt die Priorität oder Rangfolge an, die vom System jedem Thread zugewiesen wurde.
Affinitätsmaske Versteckt Zeigt die Prozessoraffinitätsmaske für jeden Thread an. In einem Multiprozessorsystem bestimmt die Affinitätsmaske die Prozessoren, auf denen ein Thread ausgeführt werden kann.
Angehaltene Anzahl Versteckt Stellt die angehaltene Anzahl bereit Diese Anzahl bestimmt, ob ein Thread ausgeführt werden kann. Weitere Informationen finden Sie unter Einfrieren und Auftauen von Threads.
Prozessname Versteckt Zeigt den Prozess an, zu dem jeder Thread gehört. Die Daten in dieser Spalte können nützlich sein, wenn Sie viele Prozesse debuggen.
Prozess-ID Versteckt Zeigt die Prozess-ID an, zu der jeder Thread gehört.
Transportqualifizierer Versteckt Identifiziert eindeutig den Computer, mit dem der Debugger verbunden ist.

Ein- und Ausblenden von Tabellenspalten

In der Symbolleiste des Fensters Threads zeigt das Dropdownmenü Spalten die Liste der verfügbaren Spalten an. Erweitern Sie die Dropdownliste, und wählen Sie einen Spaltennamen aus, um die Sichtbarkeit in der Tabelle umzuschalten. Sichtbare Spalten werden mit einem Häkchen in der Liste gekennzeichnet.

Kennzeichnen von Threads für besondere Aufmerksamkeit

Verwenden Sie das Flaggensymbol, um Threads für besondere Beachtung zu markieren. Markierte Threads werden durch ein rotes Kennzeichensymbol in der Threads Fenstertabelle gekennzeichnet. Weitere Informationen finden Sie unter Kennzeichnen von Threads und Aufheben der Kennzeichnung.

Nur gekennzeichnete Threads anzeigen

Sie können die Threads Fenster filtern, um nur gekennzeichnete Threads anzuzeigen. Wählen Sie in der Symbolleiste des Threads Fensters die Option "Nur gekennzeichnete Threads anzeigen" (Doppelflaggensymbol) aus. Sie können auch die tastenkombination STRG + 9 verwenden. Diese Aktion ist nur verfügbar, wenn gekennzeichnete Threads vorhanden sind.

Einfrieren und Reaktivieren von Threads

Wenn Sie einen Thread fixieren, startet das System die Ausführung des Threads nicht, auch wenn Ressourcen verfügbar sind.

Im systemeigenen Code können Sie Threads anhalten oder fortsetzen, indem Sie die Windows-Funktionen SuspendThread und ResumeThreadaufrufen. Sie können auch die MFC-Funktionen CWinThread::SuspendThread und CWinThread::ResumeThreadaufrufen. Wenn Sie die SuspendThread- oder ResumeThread-Funktion aufrufen, ändert sich die Angehaltene Anzahl, die im Threads-Fenster angezeigt wird. Die Anzahl der angehaltenen Threads ändert sich nicht, wenn Sie einen nativen Thread einfrieren oder reaktivieren. Im nativen Code kann ein Thread nur ausgeführt werden, wenn er reaktiviert ist und sein Wert für „Angehaltene Anzahl“ 0 beträgt.

Im verwalteten Code ändert sich die angehaltene Anzahl, wenn Sie einen Thread einfrieren oder auftauen. Wenn Sie einen Thread in verwaltetem Code einfrieren, ist der Zähler der angehaltenen Threads 1. Wenn Sie einen Thread im nativen Code einfrieren, ist die Anzahl der Aussetzungen 0, es sei denn, Sie verwenden den Aufruf SuspendThread.

Anmerkung

Wenn Sie einen Aufruf von systemeigenem Code zu verwaltetem Code debuggen, wird der verwaltete Code im selben physischen Thread wie der aufrufende systemeigene Code ausgeführt. Das Anhalten oder Einfrieren des native Threads friert auch den verwalteten Code ein.

Änderung der Ausführung für ausgewählte Threads

Sie können die Ausführung eines oder mehrerer Threads einfrieren oder reaktivieren. Wählen Sie im Fenster Threads die Threads aus, für die Sie den Ausführungszustand aktualisieren möchten. Wählen Sie in der Symbolleiste des Threads Fensters Threads einfrieren (Symbol „Wiedergabe/Pause“) oder Threads reaktivieren (grünes Wiedergabesymbol) aus. Die Aktion gilt nur für die aktuell ausgewählten Threads. Die Aktionen „Einfrieren“ und „Reaktivieren“ sind auch im Kontextmenü für jeden Thread über einen Rechtsklick verfügbar.

Ändern des aktuellen Threads

Ein gelbes Pfeilsymbol in der Tabelle des Fensters Threads zeigt den aktuellen Thread (und die Position des Ausführungszeigers) an. Die ursprüngliche Markierung des aktuellen Threads bleibt bestehen (dargestellt mit einem Umrisspfeilsymbol).

Ein gelbes Pfeilsymbol in der Threads-Fenstertabelle gibt den aktuellen Thread (und die Position des Ausführungszeigers) an. Ein grünes Pfeilsymbol mit einem geschweiften Pfeil gibt an, dass ein nicht aktueller Thread den aktuellen Debuggerkontext aufweist.

Wechseln zu einem anderen Thread

Es gibt zwei Möglichkeiten, den aktuellen Thread im Debugger zu wechseln. Doppelklicken Sie auf einen beliebigen Thread in der Threads Fenstertabelle, um ihn zum aktuellen Thread zu machen. Sie können auch mit der rechten Maustaste auf einen Thread klicken und Zu Thread wechseln auswählen.

Anwenden von Gruppierung und Sortierung auf Threads

Sie können Threads in der Threads Fenstertabelle gruppieren, indem Sie dieselben Kriterien wie die verfügbaren Spalten verwenden. Alle Kriterien sind immer für die Gruppierung verfügbar, unabhängig davon, ob die entsprechende Spalte in der aktuellen Ansicht sichtbar ist. Sie können nur eine Gruppierung für die Tabelle auswählen.

Wenn Sie Threads gruppieren, wird eine Überschrift in der Tabelle für jede Gruppe angezeigt. Die Überschrift enthält eine Gruppenbeschreibung zusammen mit der Anzahl der Mitglieder in der Gruppe. Wenn Sie nach Name gruppieren, werden möglicherweise Gruppierungen mit Überschriften wie Arbeitsthread oder Nicht gekennzeichnete Threads angezeigt. Neben jeder Gruppenüberschrift wird ein Pfeilsymbol zum Erweitern/Reduzieren angezeigt.

Nachdem Sie ein Gruppierungskriterien angewendet haben, wird die Ansicht für die Threads Fenstertabelle aktualisiert, um die Mitgliedsthreads für jede Gruppe unter ihrer Überschrift anzuzeigen. Verwenden Sie das Symbol "Erweitern/Reduzieren" für eine Gruppe, um die Mitglieder in der aktuellen Ansicht anzuzeigen oder auszublenden.

Sie können auch ein einzelnes Sortierkriterium auf die Threads in der Threads Fenstertabelle anwenden. Die Gruppierung hat Vorrang vor der Sortierung. Beispielsweise können Sie Threads nach Kategorie- gruppieren und dann nach ID innerhalb der einzelnen Kategorie-sortieren.

Gruppieren von Threads in der Tabelle

Erweitern Sie in der Threads-Fenstersymbolleiste die Dropdownliste Gruppe nach, und wählen Sie die Kriterien für die Gruppierung der Threads aus. Sie können die angewendete Gruppierung auch entfernen, indem Sie Keine in der Dropdownliste Gruppieren nach auswählen.

Sortieren von Threads in der Tabelle

Sie wenden die Sortierung auf Threads in der Threads Fenstertabelle an, indem Sie die Spaltenüberschriften oben in der Tabelle auswählen, z. B. Name oder ID.

Wenn Sie eine Spaltenüberschrift auswählen, wird die Ansicht für die Threads Fenstertabelle aktualisiert, um die Threads anzuzeigen, die nach den Werten in der ausgewählten Spalte sortiert sind. In der ausgewählten Spalte wird auch ein Pfeilsymbol nach oben/unten angezeigt. Das Pfeilsymbol nach oben zeigt die Sortierung nach der ausgewählten Spalte in aufsteigender Reihenfolge an. Das Pfeilsymbol nach unten zeigt die Sortierung nach der ausgewählten Spalte in absteigender Reihenfolge an. Wählen Sie die Spaltenüberschrift aus, um die Sortierreihenfolge zu ändern.

Sortieren von Threads innerhalb von Gruppen

Um Threads innerhalb von Gruppen im Fenster Threads zu sortieren, verwenden Sie zuerst die Dropdown-Liste Gruppieren nach, um das Gruppierungskriterium anzuwenden. Wählen Sie dann die Spaltenüberschrift aus, um die gruppierten Threads nach den Werten in der ausgewählten Spalte zu sortieren.

Erweitern oder Reduzieren aller Gruppen

Es gibt eine schnelle Möglichkeit, alle Gruppierungen in der aktuellen Ansicht ein- oder auszublenden. Wählen Sie in der Symbolleiste des Fensters Threads die Option Gruppen erweitern (Doppelfeldsymbol mit Pluszeichen) oder Gruppen reduzieren (Doppelfeldsymbol mit Minuszeichen) aus.

Suchen nach Threads

Sie können die Threads in der Threads Fenstertabelle durchsuchen und in einer der sichtbaren Tabellenspalten nach bestimmten Inhalten suchen. Wenn Sie die Suche ausführen, zeigt Visual Studio die Threadzeilen mit Spaltendaten an, die der Suchzeichenfolge entsprechen. Die Suche überprüft auch die Threadposition, die oben im Aufrufstapel in der Spalte Standort angezeigt wird.

Suchen nach bestimmten Inhalten in Threads

Es gibt verschiedene Möglichkeiten, Threads nach bestimmten Inhalten zu durchsuchen. Geben Sie in der Symbolleiste des Threads-Fensters die Zeichenfolge ein, die im Feld Suchen gesucht werden soll, und drücken Sie die EINGABETASTE. Sie können Buchstaben, Zahlen und Sonderzeichen wie < in Ihrer Suchzeichenfolge angeben. Nach Abschluss der Suche aktualisiert das fenster Threads die Tabelle so, dass Threads mit übereinstimmenden Ergebnissen angezeigt werden. Visual Studio hebt die spezifischen Instanzen hervor, die Ihrer Suchzeichenfolge entsprechen. Um zur regulären Threadansicht zurückzukehren, wählen Sie das X-Symbol neben dem Feld Suchen aus.

Sie können auch nach einer Zeichenfolge suchen, die Sie zuvor gesucht haben. Verwenden Sie das Dropdownfeld Suchen, und wählen Sie eine vorherige Suchzeichenfolge aus.

Durchsuchen des vollständigen Aufrufstapels

Standardmäßig wird der vollständige Aufrufstapel nicht durchsucht. Visual Studio sucht nur in den Threads, die in der Threads Fenstertabelle sichtbar sind, nach einer Übereinstimmung.

Sie können die vollständige Aufrufliste einschließen, indem Sie Aufruflisten in die Suche einschließen (Listenelementsymbol) in der Fenstersymbolleiste von Threads auswählen. Wenn die Option aktiviert ist, weist das Listenelementsymbol einen Rahmen auf.

Anzeigen von Aufrufstapeln und Wechseln zwischen Frames

In einem Multithreadprogramm verfügt jeder Thread über einen eigenen Aufrufstapel. Das Threads Fenster bietet eine bequeme Möglichkeit, diese Stapel anzuzeigen.

Tipp

Verwenden Sie für eine visuelle Darstellung des Aufrufstapels für jeden Thread das Parallel Stacks Fenster.

Anzeigen der Aufrufliste für den Thread

Suchen Sie in der Threads Fenstertabelle den Thread, für den Sie den vollständigen Aufrufstapel untersuchen möchten. Wählen Sie in der Spalte Position den Pfeil zum Erweitern/Reduzieren links neben der Threadposition aus. Die Position wird erweitert, um den vollständigen Aufrufstapel für den Thread anzuzeigen. Wählen Sie den Pfeil erneut aus, um nur die Position anzuzeigen.

Anzeigen oder Reduzieren aller Aufruflisten

Sie können festlegen, ob im Fenster Threads immer die vollständigen Aufrufstapel für alle Threads in der Tabelle angezeigt werden. Wählen Sie in der Threads Fenstersymbolleiste Erweitern von Aufrufstapeln (Kästchensymbol mit Pluszeichen) oder Reduzieren von Aufrufstapeln (Kästchensymbol mit Minuszeichen) aus.