在 Visual Studio 中调试多线程应用程序
线程是操作系统向其授予处理器时间的指令序列。 在操作系统中运行的每个进程都包含至少一个线程。 包含多个线程的进程称为多线程。
具有多个处理器、多核处理器或超线程进程的计算机可以同时运行多个线程。 使用许多线程并行处理可以极大地提高程序性能,但是,由于会跟踪许多线程,也使得调试更加困难。
多线程处理可能会引入新类型的潜在 bug。 例如,两个或更多线程可能需要访问同一资源,但是一次只能有一个线程可以安全地访问该资源。 必须使用某种形式的互斥以确保任何时候都仅有一个线程访问资源。 如果互斥未正确实现,则可能形成死锁条件,这种条件下,任何线程都不会执行。 对于调试而言,死锁通常是难以解决的问题。
用于调试多线程应用的工具
Visual Studio 提供不同的工具用于调试多线程应用程序。
对于线程,用于调试线程的主要工具有“线程”窗口、源窗口中的线程标记、“并行堆栈”窗口、“并行监视”窗口和“调试位置”工具栏 。 若要了解“线程”窗口和“调试位置”工具栏,请参阅演练:使用“线程”窗口进行调试。 若要了解如何使用“并行堆栈”和“并行监视”窗口,请参阅开始调试多线程应用程序。 这两个主题演示如何使用线程标记。
对于使用任务并行库 (TPL) 或并发运行时的代码,调试的主要工具是“并行堆栈”窗口、“并行监视”窗口和“任务”窗口(该窗口也支持 JavaScript)。 若要开始使用,请参阅演练:调试并行应用程序和演练:调试 C++ AMP 应用程序。
对于调试 GPU 上的线程,主要工具是“GPU 线程”窗口。 请参阅如何:使用 GPU 线程窗口。
对于进程,主要工具是“附加到进程”对话框、“进程”窗口和“调试位置”工具栏。
Visual Studio 还提供了功能强大的断点和跟踪点,在调试多线程应用程序时,它们十分有用。 使用断点条件和筛选器可将断点置于单个线程上。 使用跟踪点可以在不中断的情况下跟踪程序的执行,以研究诸如死锁之类的问题。 有关详细信息,请参阅断点操作和跟踪点。
调试具有用户界面的多线程应用程序可能会特别困难。 可以考虑在另一台计算机上运行应用程序并使用远程调试。 有关详细信息,请参阅远程调试。
有关调试多线程应用的文章
-
有关线程调试功能的教程,重点介绍“并行堆栈”窗口和“并行监视”窗口中的功能。
-
列出用于调试线程和进程的工具的功能。
-
说明如何调试多个进程。
-
演示如何使用“线程”窗口和“调试位置”工具栏的演练。
-
演示如何使用“并行堆栈”和“任务”窗口的演练。
-
将调试上下文切换到其他线程的几种方法。
-
将调试上下文切换到其他线程的几种方法。
-
在调试过程中,标记要格外关注的线程,或为其设置标志。
-
对运行于高性能群集上的应用程序进行调试的技术。
-
对于调试本机线程十分有用的简单技术。
-
为在“线程”窗口中查看的线程提供一个名称。
-
为在“线程”窗口中查看的线程提供一个名称。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈