如何:使用“线程”窗口
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
||||
标准版 |
||||
专业团队版 |
表格图例:
适用 |
|
不适用 |
|
默认情况下隐藏的一条或多条命令。 |
使用“线程”窗口,可以检查和操作正在调试的程序中的线程。
“线程”窗口中包含当前存在于程序中的所有线程的列表。该列表针对每个线程提供以下有用的信息:
“名称”和“ID”列显示线程的名称和标识号,以便帮助您识别线程。
“优先级”列显示系统已向每个线程分配的优先级。
“挂起”列显示挂起计数,后者决定某个线程当前是否能够运行。有关挂起计数的解释,请参见本主题的“冻结和解冻线程”一节。
“类别”列将线程划分为用户界面线程、远程过程调用处理程序或辅助线程。此列还标识主线程。
“位置”列显示在其中创建线程的源位置。
标记列不带标记并位于最左侧。在标记要进行研究的线程时,一个标记图标将显示在此列中。有关如何标记线程的说明,请参见如何:标记线程和取消标记线程。
最后,还有一个不带标记的列,即从左侧起的第二列。此列是活动线程列。此列中的黄色箭头指示一个活动线程。
以中断模式或运行模式显示“线程”窗口
- 在“调试”菜单上指向“窗口”,再单击“线程”。
对线程列表排序
在“线程”窗口中单击任意列顶部的按钮。
若要将标记的线程排序到列表顶部,请单击最左侧的按钮。
若要将活动线程排序到列表顶部,请单击从左侧起的第二个按钮。
若要将 ID 号最小的线程排序到顶部,请单击“ID”按钮。
若要按照类别对线程排序,请单击“类别”按钮。这会使线程按功能类别排序,而这些类别按字母顺序排序。
若要按照名称对线程排序,请单击“名称”按钮。
若要按照源位置对线程排序,请单击“位置”按钮。
若要将具有最高优先级的线程排序到顶部,请单击“优先级”按钮。
若要将挂起计数最小的线程排序到顶部,请单击“挂起”按钮。
如果希望颠倒排序顺序,请再次单击相同按钮。例如,如果按照线程 ID 号排序,则会将 ID 号最小的线程排序到顶部。如果再次单击“ID”按钮,则会将 ID 号最大的线程排序到顶部。
将调试上下文切换到其他线程
在“线程”窗口中右击某个线程,并在快捷菜单上选择“切换到线程”。
- 或 -
双击任一线程。
黄色箭头表示活动线程。
冻结和解冻线程
可以冻结或解冻线程。当线程冻结时,即便有可用资源,系统也不会开始该线程的执行。
在本机代码中,可以通过调用 Windows 函数 SuspendThread 和 ResumeThread 或者 MFC 函数 CWinThread::SuspendThread 和 CWinThread::ResumeThread 来挂起或继续线程。调用 SuspendThread 或 ResumeThread 将更改在“线程”窗口中显示的挂起计数。但是,冻结或解冻本机线程不会更改挂起计数。在本机代码中线程将无法执行,除非该线程解冻并且其挂起计数为零。
在托管代码中,冻结或解冻线程不会更改挂起计数。在托管代码中,冻结线程的挂起计数为 1。在本机代码中,冻结线程的挂起计数为 0,除非该线程由 SuspendThread 调用挂起。
说明: |
---|
在调试本机代码对托管代码的调用时,托管代码与调用它的本机代码在同一个物理线程中运行。挂起或冻结本机线程也会冻结托管代码。 |
冻结(防止执行)线程
- 在“线程”窗口中右击某个线程,并在快捷菜单上选择“冻结”。
解冻(允许执行)线程
- 在“线程”窗口中右击某个线程,并在快捷菜单上选择“解冻”。
显示线程调用堆栈并在帧之间切换
在多线程程序中,每个线程都有自己的调用堆栈。“线程”窗口提供了一种查看线程调用堆栈的简便方法。
查看线程的调用堆栈
在“线程”窗口中,将鼠标指针放在活动线程列内与要研究的线程相对应的行上。
经过短暂的延迟后,将会出现数据提示。其中显示线程的调用堆栈。