Debuggen von Multithreadanwendungen in Visual Studio
Ein Thread ist eine Folge von Anweisungen, für die das Betriebssystem Prozessorzeit vergibt. Jeder Prozess, der im Betriebssystem ausgeführt wird, umfasst mindestens einen Thread. Prozesse, die über mehr als einen Thread verfügen, werden als Multithreadprozesse bezeichnet.
Auf Computern mit mehreren Prozessoren, Mehrkernprozessoren oder Hyperthreadingprozessen können mehrere gleichzeitige Threads ausgeführt werden. Die parallele Verarbeitung mit vielen Threads kann die Programmleistung erheblich verbessern, andererseits aber auch das Debuggen erschweren, da zahlreiche Threads nachverfolgt werden.
Durch Multithreading können neue potenzielle Fehlertypen eingeführt werden. Beispielsweise müssen zwei oder mehr Threads auf dieselbe Ressource zugreifen, während jeweils nur ein Thread sicher auf die Ressource zugreifen kann. Um sicherzustellen, dass immer nur ein Thread auf die Ressource zugreifen kann, ist eine Form des gegenseitigen Ausschlusses erforderlich. Wenn der gegenseitige Ausschluss nicht richtig implementiert wird, kann eine Deadlock-Bedingung entstehen, unter der kein Thread ausgeführt wird. Deadlocks können beim Debuggen ein schwerwiegendes Problem darstellen.
Tools zum Debuggen von Multithread-Apps
Visual Studio stellt verschiedene Tools für das Debuggen von Multithread-Apps bereit.
Die wichtigsten Tools für das Debuggen von Threads sind das Fenster Threads, Threadmarker in Quellcodefenstern, das Fenster Parallele Stapel, das Fenster Parallele Überwachung sowie die Symbolleiste Debugspeicherort. Weitere Informationen zum Fenster Threads und zur Symbolleiste Debugspeicherort finden Sie unter Exemplarische Vorgehensweise: Debuggen mithilfe des Fensters „Threads“. Informationen zum Verwenden der Fenster Parallele Stapel und Parallele Überwachung finden Sie unter Erste Schritte zum Debuggen von Multithreadanwendungen (C#, Visual Basic, C++). In beiden Themen wird gezeigt, wie Threadmarker verwendet werden.
Bei Code, der die Task Parallel Library (TPL) oder Concurrency Runtime verwendet, werden für das Debuggen hauptsächlich das Fenster Parallele Stapel, das Fenster Parallele Überwachung und das Fenster Aufgaben verwendet, das zudem JavaScript unterstützt. Informationen zu den ersten Schritten finden Sie unter Exemplarische Vorgehensweise: Debuggen einer parallelen Anwendung in Visual Studio (C#, Visual Basic, C++) und Exemplarische Vorgehensweise: Debuggen einer C++ AMP-Anwendung.
Zum Debuggen von Threads auf der GPU wird hauptsächlich das Fenster GPU-Threads verwendet. Weitere Informationen finden Sie unter How to: Use the GPU Threads window (Vorgehensweise: Verwenden des Fensters „GPU-Threads“)
Die wichtigsten Tools bei Prozessen sind das Dialogfeld An Prozess anhängen, das Fenster Prozesse und die Symbolleiste Debugspeicherort.
Visual Studio stellt auch leistungsstarke Breakpoints und Ablaufverfolgungspunkte bereit, die beim Debuggen von Multithreadanwendungen hilfreich sein können. Verwenden Sie Breakpointbedingungen und -filter, um Breakpoints in einzelnen Threads zu platzieren. Ablaufverfolgungspunkte ermöglichen es Ihnen, die Ausführung des Programms ohne Unterbrechung zu verfolgen, um Probleme wie Deadlocks zu untersuchen. Weitere Informationen finden Sie unter Haltepunktaktionen und Ablaufverfolgungspunkte.
Das Debuggen einer Multithreadanwendung mit einer Benutzeroberfläche kann besonders schwierig sein. Sie könnten erwägen, die Anwendung auf einem zweiten Computer auszuführen und das Remotedebuggen zu verwenden. Weitere Informationen finden Sie unter Remotedebuggen.
Artikel zum Debuggen von Multithread-Apps
Erste Schritte zum Debuggen von Multithreadanwendungen (C#, Visual Basic, C++)
Dieser Artikel enthält eine Einführung in die Features für das Threaddebuggen, wobei der Schwerpunkt auf den Features im Fenster Parallele Stapel und Parallele Überwachung liegt.
Tools zum Debuggen von Threads und Prozessen in Visual Studio
Unter diesem Link sind die Features der Tools zum Debuggen von Threads und Prozessen aufgeführt.
-
Erläutert das Debuggen mehrerer Prozesse.
Exemplarische Vorgehensweise: Debuggen mithilfe des Fensters „Threads“.
Dieser Artikel enthält eine exemplarische Vorgehensweise zur Verwendung des Fensters Threads und der Symbolleiste Debugspeicherort.
Exemplarische Vorgehensweise: Debuggen einer parallelen Anwendung
Exemplarische Vorgehensweise, in der erläutert wird, wie die Fenster Parallele Stapel und Aufgaben verwendet werden
-
Hier werden verschiedene Möglichkeiten erläutert, mit dem Debugkontext zu einem anderen Thread zu wechseln.
Befolgen eines einzelnen Threads beim Debuggen
Hier werden verschiedene Möglichkeiten erläutert, mit dem Debugkontext zu einem anderen Thread zu wechseln.
-
Markieren oder Kennzeichnen von Threads, die beim Debuggen besondere Aufmerksamkeit erhalten sollen.
-
Techniken zum Debuggen einer Anwendung, die auf einem Hochleistungscluster ausgeführt wird.
Tipps zum Debuggen von Threads in nativem Code
Einfache Techniken, die beim Debuggen systemeigener Threads hilfreich sein können.
-
Geben Sie Ihrem Thread einen Namen, der im Fenster Threads angezeigt wird.
-
Geben Sie Ihrem Thread einen Namen, der im Fenster Threads angezeigt wird.
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für