Gewusst wie: Verwenden des Threadfensters

Aktualisiert: November 2007

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

C++

Web Developer

Express

Standard

Pro und Team

Tabellenlegende:

Vorhanden

Nicht vorhanden

Befehl oder Befehle, die standardmäßig ausgeblendet sind.

Im Fenster Threads können Sie Threads im gedebuggten Programm überprüfen und ändern.

Das Fenster Threads enthält eine Liste aller Threads, die aktuell im Programm vorhanden sind. Für jeden Thread liefert die Liste Ihnen bestimmte nützliche Informationen:

  • Die Spalten Name und ID zeigen den Threadnamen und die ID an, mit denen Sie Threads identifizieren können.

  • Die Spalte Priorität zeigt die Priorität oder die Rangfolge an, die den einzelnen Threads vom System zugewiesen wurden.

  • Die Spalte Unterbrechen zeigt den Unterbrechungszähler an, durch den festgestellt wird, ob ein Thread derzeit ausgeführt werden kann. Eine Erläuterung des Unterbrechungszählers finden Sie in diesem Thema im Abschnitt Sperren und Entsperren von Threads.

  • Durch die Spalte Kategorie werden Threads als Benutzeroberflächenthreads, Remoteprozeduraufruf-Handler oder Workerthreads klassifiziert. Außerdem wird durch diese Spalte der Hauptthread identifiziert.

  • Die Spalte Speicherort zeigt den Quellspeicherort an, an dem ein Thread erstellt wird.

  • Die Kennzeichnerspalte ist nicht beschriftet und befindet sich ganz links. Wenn Sie einen Thread kennzeichnen, den Sie untersuchen möchten, wird in dieser Spalte ein Kennzeichnungssymbol angezeigt. Anweisungen zum Kennzeichnen von Threads finden Sie unter Gewusst wie: Kennzeichnen von Threads und Aufheben der Kennzeichnung.

  • Schließlich gibt es eine weitere unbeschriftete Spalte, die zweite Spalte von links. Dies ist die Spalte für den aktiven Thread. Ein gelber Pfeil in dieser Spalte zeigt an, dass ein Thread aktiv ist.

So zeigen Sie das Fenster Threads im Unterbrechungs- oder Ausführmodus an

  • Zeigen Sie im Menü Debuggen auf Fenster, und klicken Sie auf Threads.

So sortieren Sie die Liste von Threads

  1. Klicken Sie im Fenster Threads auf die Schaltfläche am oberen Rand einer beliebigen Spalte.

    • Um gekennzeichnete Threads am Anfang der Liste zu positionieren, klicken Sie auf die ganz links angezeigte Schaltfläche.

    • Um aktive Threads am Anfang der Liste zu positionieren, klicken Sie auf die zweite Schaltfläche von links.

    • Um die Threads mit den niedrigsten IDs am Anfang zu positionieren, klicken Sie auf die Schaltfläche ID.

    • Um Threads nach Kategorie zu sortieren, klicken Sie auf die Schaltfläche Kategorie. Dadurch werden die Threads in Funktionskategorien eingeordnet, die alphabetisch sortiert sind.

    • Um Threads nach Namen zu sortieren, klicken Sie auf die Schaltfläche Name.

    • Um Threads nach Quellspeicherort zu sortieren, klicken Sie auf die Schaltfläche Speicherort.

    • Um die Threads mit der höchsten Priorität am Anfang zu positionieren, klicken Sie auf die Schaltfläche Priorität.

    • Um die Threads mit den niedrigsten Unterbrechungszählern am Anfang zu positionieren, klicken Sie auf die Schaltfläche Unterbrechen.

  2. Wenn Sie die Sortierreihenfolge umkehren möchten, klicken Sie erneut auf dieselbe Schaltfläche. Wenn Sie beispielsweise nach Thread-ID sortieren, werden die Threads mit der niedrigsten ID am Anfang positioniert. Wenn Sie erneut auf die Schaltfläche ID klicken, werden die Threads mit der höchsten ID am Anfang positioniert.

So wechseln Sie mit dem Debugkontext zu einem anderen Thread

  • Klicken Sie im Fenster Threads mit der rechten Maustaste auf einen Thread, und wählen Sie im Kontextmenü Zu Thread wechseln aus.

    - oder -

  • Doppelklicken Sie auf einen beliebigen Thread.

    Der aktive Thread wird durch einen gelben Pfeil gekennzeichnet.

Sperren und Entsperren von Threads

Threads können gesperrt oder entsperrt werden. Wenn ein Thread gesperrt ist, wird die Threadausführung vom System auch dann nicht gestartet, wenn Ressourcen verfügbar sind.

Im systemeigenen Code kann die Ausführung von Threads unterbrochen und fortgesetzt werden, indem die Windows-Funktionen SuspendThread und ResumeThread oder die MFC-Funktionen CWinThread::SuspendThread und CWinThread::ResumeThread aufgerufen werden. Durch Aufrufen von SuspendThread oder ResumeThread ändert sich der Unterbrechungszähler, der im Fenster Threads angezeigt wird. Durch das Sperren oder Entsperren eines systemeigenen Threads wird der Unterbrechungszähler jedoch nicht geändert. Im systemeigenen Code kann ein Thread nur ausgeführt werden, wenn er entsperrt ist und sein Unterbrechungszähler den Wert 0 hat.

In verwaltetem Code hat das Sperren oder Entsperren keinen Einfluss auf den Wert des Unterbrechungszählers. In verwaltetem Code hat der Unterbrechungszähler eines gesperrten Threads den Wert 1, während er in systemeigenem Code den Wert 0 hat, sofern seine Ausführung nicht durch einen SuspendThread-Aufruf unterbrochen wurde.

Hinweis:

Beim Debuggen eines Aufrufs vom systemeigenen Code in den verwalteten Code wird der verwaltete Code im selben physischen Thread ausgeführt wie der systemeigene Code, durch den er aufgerufen wurde. Durch Unterbrechen oder Sperren des systemeigenen Threads wird auch der verwaltete Code gesperrt.

So sperren Sie die Ausführung eines Threads

  • Klicken Sie im Fenster Threads mit der rechten Maustaste auf einen Thread, und wählen Sie im Kontextmenü Sperren aus.

So entsperren Sie die Ausführung eines Threads

  • Klicken Sie im Fenster Threads mit der rechten Maustaste auf einen gesperrten Thread, und wählen Sie im Kontextmenü Entsperren aus.

Anzeigen von Threadaufruflisten und Wechseln zwischen Rahmen

In einem Multithreadprogramm verfügt jeder Thread über eine eigene Aufrufliste. Das Fenster Threads bietet eine bequeme Möglichkeit, Threadaufruflisten anzuzeigen.

So zeigen Sie die Aufrufliste eines Threads an

  • Positionieren Sie den Mauszeiger im Fenster Threads in der Spalte der aktiven Threads in der Zeile, die den zu überprüfenden Thread enthält.

    Nach einer kurzen Verzögerung wird ein DataTip eingeblendet. Darin sehen Sie die Aufrufliste für den Thread.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Debuggen einer Multithreadanwendung

Weitere Ressourcen

Debuggen von Multithreadanwendungen