Threads und Prozesse

Threads und Prozesse sind verwandte Konzepte der Informatik. Beide stellen Folgen von Anweisungen dar, die in einer bestimmten Reihenfolge ausgeführt werden müssen. Anweisungen von verschiedenen Threads oder Prozessen können aber parallel ausgeführt werden.

Prozesse werden im Betriebssystem verwaltet und entsprechen dem, was Benutzer als Programme oder Anwendungen sehen. Ein Thread hingegen wird von einem Prozess verwaltet. Aus diesem Grund werden Threads gelegentlich als Lightweightprozesse bezeichnet. Jeder Prozess besteht aus einem oder mehreren Threads.

Die Möglichkeit, mehrere Prozesse auszuführen, versetzt einen Computer in die Lage, mehr als eine Aufgabe gleichzeitig auszuführen. Das Vorhandensein mehrerer Threads versetzt einen Prozess in die Lage, Arbeiten so aufzuteilen, dass sie parallel ausgeführt werden können. Auf einem Computer mit Multiprozessoren können Prozesse oder Threads auf verschiedenen Prozessoren ausgeführt werden. Dies ermöglicht eine echte Parallelverarbeitung.

Echte Parallelverarbeitung ist nicht immer möglich. Threads müssen manchmal synchronisiert werden. Ein Thread muss möglicherweise auf das Ergebnis eines anderen Threads warten, oder ein Thread benötigt exklusiven Zugriff auf eine Ressource, die von einem anderen Thread verwendet wird. Synchronisierungsprobleme sind eine häufige Ursache von Programmfehlern in Multithreadanwendungen. Es kann passieren, dass Threads auf eine Ressource warten, die nie verfügbar wird. Dies führt zu einem Zustand, der Deadlock genannt wird.

Der Visual Studio-Debugger stellt leistungsstarke und benutzerfreundliche Tools zum Debuggen von Threads und Prozessen bereit.

Tools zum Debuggen von Threads und Prozessen in Visual Studio

Die wichtigsten Tools für die Arbeit mit Prozessen in Visual Studio sind das Dialogfeld An den Prozess anhängen sowie das Prozessfenster und die Symbolleiste Debugspeicherort. Die wichtigsten Tools für das Debuggen von Threads sind das Threadfenster, Threadmarker in Quellcodefenstern sowie die Symbolleiste Debugspeicherort.

Die wichtigsten Tools zum Debuggen von Multithreadanwendungen sind die Fenster Parallele Stapel und Parallele Aufgaben.

In der folgenden Tabelle sind die verfügbaren Informationen und die an jeder Stelle möglichen Aktionen aufgeführt:

Benutzeroberfläche

Verfügbare Informationen

Ausführbare Aktionen

Dialogfeld An den Prozess anhängen

Verfügbare Prozesse, an die angehängt werden kann:

  • Prozessname (.exe)

  • Prozess-ID-Nummer

  • Menüleistentitel

  • Typ (Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)

  • Benutzername (Kontoname)

  • Sitzungsnummer

Auswählen eines Prozesses, an den angehängt werden soll

Auswählen eines Remotecomputers

Ändern des Transporttyps für die Verbindung mit Remotecomputern

Prozessfenster

Angehängte Prozesse:

  • Prozessname

  • Prozess-ID-Nummer

  • Pfad zur EXE-Datei des Prozesses

  • Menüleistentitel

  • Zustand (Unterbrechen, Aktiv)

  • Debuggen (Systemeigen, Verwaltet usw.)

  • Transporttyp (standardmäßig, systemeigen ohne Authentifizierung)

  • Transportqualifizierer (Remotecomputer)

Tools:

  • Anfügen

  • Trennen

  • Beenden

Kontextmenü:

  • Anfügen

  • Trennen

  • Nach Beenden des Debuggens trennen

  • Beenden

Threadfenster

Threads in aktuellem Prozess:

  • Thread-ID

  • Verwaltete ID

  • Kategorie (Hauptthread, Benutzeroberflächenthread, Remoteprozeduraufruf-Handler oder Arbeitsthread)

  • Thread Name

  • Ort, an dem der Thread erstellt wird

  • Priorität

  • Affinitätsmaske

  • Angehaltene Anzahl

  • Prozessname

  • Kennzeichenindikator

  • Angehaltener Indikator

Tools:

  • Suche

  • Aufrufliste suchen

  • Nur eigenen Code kennzeichnen

  • Benutzerdefinierte Modulauswahl kennzeichnen

  • Gruppieren nach

  • Columns

  • Aufruflisten erweitern/reduzieren

  • Gruppen erweitern/reduzieren

  • Threads sperren/entsperren

Kontextmenü:

  • Threads in Quelle anzeigen

  • Zu Thread wechseln

  • Ausgeführten Thread sperren

  • Gesperrten Thread entsperren

  • Thread zur weiteren Überprüfung kennzeichnen

  • Kennzeichnung eines Threads aufheben

  • Thread umbenennen

  • Threads anzeigen und ausblenden

Sonstige Aktionen:

  • Aufrufliste für einen Thread in einem DataTip anzeigen

Quellcodefenster

Threadindikatoren im linken Bundsteg geben einzelne oder mehrere Threads an (standardmäßig deaktiviert, die Aktivierung erfolgt über das Kontextmenü im Fenster Threads)

Kontextmenü:

  • Zu Thread wechseln

  • Thread zur weiteren Überprüfung kennzeichnen

  • Kennzeichnung eines Threads aufheben

Symbolleiste Debugspeicherort

  • Aktueller Prozess

  • Aktueller Thread

  • Aktueller Stapelrahmen

  • Zu einem anderen Prozess wechseln

  • Zu einem anderen Thread im aktuellem Prozess wechseln

  • Zu einem anderen Stapelrahmen in aktuellem Thread wechseln

  • Kennzeichnen bzw. Aufheben der Kennzeichnung von aktuellen Threads

  • Nur gekennzeichnete Threads anzeigen

Fenster Parallele Stapel

  • Aufruflisten für mehrere Threads in einem Fenster.

  • Aktiver Stapelrahmen für jeden Thread.

  • Aufrufer und Aufgerufene für die einzelnen Methoden.

  • Herausfiltern bestimmter Threads

  • Wechseln zur Ansicht Parallele Aufgaben

  • Kennzeichnen bzw. Aufheben der Kennzeichnung eines Threads

  • Zoom

Fenster Parallele Aufgaben

  • Anzeigen von Informationen zu Task-Objekten, einschließlich der Aufgaben-ID, des Aufgabenstatus (geplant, ausgeführt, wartend, blockiert) und der der Aufgabe zugewiesenen Threads.

  • Aktuelle Position in der Aufrufliste.

  • Zur Erstellungszeit an die Aufgabe übergebener Delegat

  • Wechseln zur aktuellen Aufgabe

  • Kennzeichnen oder Aufheben der Kennzeichnung einer Aufgabe

  • Einfrieren oder Reaktivieren einer Aufgabe

Siehe auch

Aufgaben

Gewusst wie: Verwenden des Fensters "Prozesse"

Weitere Ressourcen

Anhängen an laufende Prozesse

Debuggen von Multithreadanwendungen