Visual Studio调试器指南---Threads窗口

时间:2020-05-12 10:55:35   收藏:0   阅读:66

大多数的应用程序都使用多线程技术。对应Windows应用程序,为了能够使用户界面保持快速响应,经常需要把费时的任务放在与主应用程序独立的线程上运行。此时,多个线程的并发执行调试变得很困难,特别是在多个线程访问同一个类和方法时。Threads能够帮助我们减轻复杂度。

打开窗口

一般来说当程序遇到断点进入调试模式,会自动打开Threads窗口,如果没有,我们可以通过下面的方式打开:

窗口的使用

技术分享图片

线程窗口包含其中每行描述一个单独的线程在应用程序中的表。 默认情况下,该表列出应用程序中的所有线程,但可以筛选列表以仅显示感兴趣的线程。 每个列说明了不同类型的信息。 您还可以隐藏某些列。 如果显示所有列,显示以下各列,从左到右:

在顶部的工具栏线程窗口中,选择然后,选中或清除要显示或隐藏的列的名称。

技术分享图片

在“线程”窗口中,可以用图标标记来标记要格外关注的线程 。 在“线程”窗口中,可以选择显示所有线程或仅显示标记的线程 。

技术分享图片

当冻结线程时,系统不会启动线程的执行,即使提供了资源。在本机代码中,您可以挂起或继续线程通过调用 Windows 函数SuspendThreadResumeThread或者,致电 MFC 函数CWinThread::SuspendThread并cwinthread:: Resumethread。 如果您调用SuspendThreadResumeThread,则挂起项计数中所示线程窗口将会更改。 如果冻结或解冻本机线程不会更改挂起项计数。 线程不能在本机代码中执行,除非它线程解冻并且其挂起项计数为零。在托管代码中,当冻结或解冻线程时,将更改挂起项计数。 如果在托管代码中冻结线程,其挂起项计数为 1。 当本机代码中冻结线程时,其挂起项计数为 0,除非使用SuspendThread调用。

在顶部的工具栏线程窗口中,选择冻结线程解冻线程此操作仅影响在“线程”窗口中选中的线程 。
技术分享图片

 

黄色箭头指示当前线程 (和执行指针的位置)。 带有卷尾的绿色箭头指示非当前线程具有当前的调试器上下文。

技术分享图片

若要切换到另一个线程请按照以下步骤之一操作:

分组线程时,表中将显示每组的标题。 标题包含组说明(如“辅助线程”或“未标记的线程”)和树控件 。 每组的成员线程显示在组标题下。 如果你想要隐藏组的成员线程,使用树控件折叠组。

因为分组优先于排序,所以您可以先按类别(以此为例)分组线程,再按每个类别中的 ID 对其进行排序。

排序线程
技术分享图片

  1. 在顶部的工具栏线程窗口中,选择任意列顶部的按钮。

    线程现在按该列中的值进行排序。

  2. 如果你想要反转排序顺序,请再次选择相同的按钮。

    在列表顶部显示的线程现在显示在底部。

分组线程

技术分享图片

对组内线程排序

  1. 在顶部的工具栏线程窗口中,选择分组依据列表,然后选择要分组线程所依据的条件。

  2. 在中线程窗口中,选择任意列顶部的按钮。

    线程现在按该列中的值进行排序。

展开或折叠所有组

在顶部的工具栏线程窗口中,选择展开组折叠组

技术分享图片

 

您可以搜索匹配的指定的字符串中的线程线程窗口。 在搜索线程时,窗口将显示匹配的任何列中的搜索字符串的所有线程。 信息包括在“位置”列中调用堆栈顶部显示的线程位置 。 默认情况下,不搜索整个调用堆栈。

搜索特定线程

  1. 在“线程”窗口顶部的工具栏中,转到“搜索”框,执行下列操作之一 :

    • 输入搜索字符串,然后按Enter
      技术分享图片

    - 或 -

    • 选择下拉列表旁边搜索框并选择上一次搜索的搜索字符串。
  2. (可选)若要在搜索中包括整个调用堆栈,请选择“搜索调用堆栈” 。
    技术分享图片

原文:https://www.cnblogs.com/yilang/p/12829979.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!