Freigeben über


Debuggen von Threads und Prozessen in Visual Studio

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, Parallele Aufgaben, Parallele Überwachung und GPU-Threads.

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

  • Miniaturansicht der Anwendung anzeigen

  • Anwendung anhalten

  • Anwendung fortsetzen

  • Anwendung anhalten und herunterfahren

  • Aktueller Thread

  • Aktuellen Status des Thread-Flags umkehren

  • Nur gekennzeichnete Threads anzeigen

  • Nur aktuellen Prozess anzeigen

  • Aktueller Stapelrahmen

  • Zu einem anderen Prozess wechseln

  • Anwendung anhalten, fortsetzen oder herunterfahren

  • 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

  • Nur den aktuellen Prozess 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

Fenster Parallele Überwachung

  • Die Kennzeichenspalte, in der Sie einen Thread markieren können, der besondere Aufmerksamkeit erhalten soll.

  • Die Framespalte, in der ein Pfeil den ausgewählten Frame angibt.

  • Eine konfigurierbare Spalte, in der der Computer, der Prozess, die Kachel, die Aufgabe und der Thread angezeigt werden können.

  • Kennzeichnen bzw. Aufheben der Kennzeichnung eines Threads

  • Nur gekennzeichnete Threads anzeigen

  • Frames wechseln

  • Spalte sortieren

  • Threads gruppieren

  • Threads einfrieren oder reaktivieren

  • Daten in das parallele Überwachungsfenster exportieren

Fenster GPU-Threads

  • Die Kennzeichenspalte, in der Sie einen Thread markieren können, der besondere Aufmerksamkeit erhalten soll.

  • Die Spalte mit aktiven Threads, in der ein gelber Pfeil einen aktiven Thread anzeigt. Ein Pfeil gibt den Thread an, in dem die Ausführung durch den Debugger unterbrochen wurde.

  • Die Spalte Threadanzahl, in der die Anzahl von Threads an derselben Position angezeigt wird.

  • Die Spalte Zeile, in der die Codezeile angezeigt wird, in der sich die jeweilige Threadgruppe befindet.

  • Die Spalte Adresse, in der die Anweisungsadresse angezeigt wird, in der sich die jeweilige Threadgruppe befindet.

  • Die Spalte Speicherort, in der der Ort im Code die Adresse angegeben ist.

  • Die Spalte Status, in der angegeben ist, ob der Thread aktiv oder blockiert ist.

  • Die Spalte Kachel, in der der Kachelindex für die Threads in der Zeile angezeigt wird.

  • Zu einem anderen aktiven Thread wechseln

  • Bestimmte Kachel und bestimmten Thread anzeigen

  • Spalte ein- oder ausblenden

  • Nach Spalte sortieren

  • Threads gruppieren

  • Threads einfrieren oder reaktivieren

  • Kennzeichnen bzw. Aufheben der Kennzeichnung eines Threads

  • Nur gekennzeichnete Threads anzeigen

Siehe auch

Weitere Ressourcen

Anfügen an laufende Prozesse mit dem Visual Studio Debugger

Debuggen von Multithreadanwendungen in Visual Studio

Debuggen von GPU-Code