演练:调试多线程应用程序

Visual Studio 2012 提供了改进的 线程数 窗口及其他用户界面改进便于调试多线程应用程序。 本演练只需几分钟,,但完成后将熟悉用于调试多线程应用程序的新增界面功能。

若要开始本演练,您需要创建一个多线程应用程序项目。 按照列出的步骤创建该项目。

创建演练项目

  1. 文件 菜单中,选择 新建 然后单击 项目

    新建项目 出现对话框。

  2. 项目类型框中,单击所选的语言: Visual Basic、 **Visual C#**或 Visual C++

  3. 模板 框中,选择 控制台应用程序CLR 控制台应用程序

  4. 名称 框中,键入名称 MyThreadWalkthroughApp。

  5. 单击 确定

    一个新的控制台项目随即显示。 创建该项目后,将显示源文件。 根据所选的语言,源文件可能是 Module1.vb、 Program.cs 或 MyThreadWalkthroughApp.cpp

  6. 删除源文件的代码并中出现 “创建线程”主题 启动时创建线程并传递数据的节的示例代码替换它。

  7. 文件 菜单上,单击 全部保存

开始演练

  • 在源窗口中,找到以下代码:

    Thread.Sleep(3000) 
    Console.WriteLine(
    
Thread.Sleep(3000);
Console.WriteLine();
Thread::Sleep(3000);
Console.WriteLine();

开始调试

  1. 右击 Console.WriteLine 语句,指向 断点 然后单击 插入断点

    在源窗口左侧的滚动条槽中,将显示一个红色球。 这指示断点现在已在该位置设置。

  2. 调试 菜单上,单击 启动调试

    调试开始,您的控制台应用程序开始运行,然后在断点处停止。

  3. 如果此时控制台应用程序窗口具有焦点,则返回焦点的 Visual Studio 窗口中单击。 Visual Studio。

  4. 在源窗口中,找到包含以下代码的行:

    Thread.Sleep(5000) 
    
Thread.Sleep(3000);
Thread::Sleep(3000);

查看线程标记

  1. 右击 " 线程数 窗口,然后单击 在源中显示线程

  2. 查看窗口左侧的滚动条槽。 此行,则您将看到类似于两根细线的图标。 一个线程是红色的,另一个蓝色。 线程标记指示线程在此位置停止。 可能,线程在此位置停止。

  3. 将鼠标指针悬停在线程标记的指针。 数据提示随即显示。 数据提示将告诉您名称和线程 ID 号每个已停止线程的。 在这种情况下,只有一个线程,其名称可能是 <noname>。

  4. 右击线程标记。 请注意快捷菜单中选择。

此图标是 线程标记:

线程标记

标记和取消标记线程

在 Visual Studio 2008,可以标记要格外关注的线程。 标记线程是一种好方法记录重要线程并忽略不关心的线程。

标记线程

  1. 查看 菜单上,指向 工具栏

    确保 调试位置 工具栏中选择。

  2. 转到 " 调试位置 工具栏并单击 线程 列表。

    备注

    可以通过三个识别此工具栏重要列表: 处理线程堆栈帧

  3. 通知列表中显示的线程数目。

  4. 返回源窗口再次右击 线程 标记。

  5. 在快捷菜单上,指向 标志,再单击线程名称和 ID 号。

  6. " 调试位置 工具栏并单击 线程 再次列表。

    仅显示标记的线程现在显示在列表中。 是在 线程 右侧的标记按钮列表。 在按钮的标记图标灰显的。 现在,它是内置,显示的红色。

  7. 指针悬停在标记图标上。

    弹出显示。 此弹出消息告诉您的模式 线程 列表中: 仅显示标记的线程

  8. 单击标记按钮切换回 显示所有线程 模式。

  9. 单击 线程 再次列表并验证现在可以重新看到所有线程。

  10. 单击标记按钮切换回 仅显示标记的线程

  11. 调试 菜单上,指向 窗口 然后单击 线程数

    线程数 将出现窗口。 一个线程具有一突出的标记图标附加到它。

  12. 在源窗口中,再次右击线程标记。

    请注意哪些选择现在快捷菜单。 而不是 标志,现在可以看到 取消标记。 不要单击 取消标记

  13. 如何的转到下一个过程有关取消标记线程。

取消标记线程

  1. 线程数 窗口中,右击行与标记的线程相对应。

    快捷菜单显示。 其中包括与选项。 取消标记取消标记整个

  2. 若要取消标记线程,请单击 取消标记

  3. 单击红色的标记图标。

  4. 再次查看 " 调试位置 工具栏。 标记按钮再次灰显。 这是因为您已取消标记的唯一标记的线程。 由于没有标记的线程,工具栏将返回了 显示所有线程 模式。 单击 线程 列表并验证是否可以看到所有线程。

  5. 线程数 窗口并检查信息列。

    在每一列顶部,大多数按钮具有标识列的标题。 但是,在左侧的第一列上没有标题。 相反,它具有一个图标,即标记的轮廓。 您将注意到该线程的每一行上的相同轮廓将列出。 边框意味着该线程已取消标记。

  6. 单击标记轮廓两个线程中,第二个和第三个从列表底部。

    标记图标变为纯红色,而不是空心边框。

  7. 单击该标记列顶部的按钮。

    ,当您单击按钮时,线程的订单列表更改。 线程列表排序的排序形式的标记的线程。

  8. 同样,请单击该标记列顶部的按钮。

    再次改变的排序顺序。

更多有关 " 线程 " 窗口

了解有关 " 线程 " 窗口

  1. 线程数 窗口,请检查从左侧起的第三列。 此列顶部的按钮上显示 ID

  2. 单击 ID

    线程列表由线程 ID 号排序。

  3. 右击列表中的所有线程。 在快捷菜单上,单击 十六进制显示

    更改线程 ID 号的格式。

  4. 将鼠标指针悬停在所有线程上鼠标指针悬停在列表。

    经过短时间的延迟后,将会出现数据提示。 它显示线程的部分调用堆栈。

  5. 查看从左侧起的第四列,标记 类别。 线程按类别分类。

    在此过程中创建的第一个线程称为主线程。 找到线程的列表。

  6. 右击主线程然后单击 线程切换

    警告出现对话框。 它告诉您 Visual Studio 无法显示主线程的源代码。

    单击 确定

  7. 查看 调用堆栈 窗口和 调试位置 工具栏。

    调用堆栈 窗口的内容已经更改。

切换活动线程

切换线程

  1. 线程数 窗口,请检查从左侧起的第二列。 此列顶部的按钮上没有文本或图标。 此列为 活动线程 列。

  2. 查看 活动线程 列将会看到一个具有一个黄色箭头。 这是 活动线程指示符。

  3. 记下活动线程指示符的线程 ID 号。 您可以将活动线程指示符移到另一个线程,但是,则必须使它,在完成。

  4. 右击另一个线程然后单击 线程切换

  5. 查看在源窗口中 调用堆栈 窗口。 内容已经更改。

  6. 查看 调试位置 工具栏。 活动线程已更改其中,还为。

  7. 转到 调试位置 工具栏。 单击 线程 框并从选择不同的线程下拉列表。

  8. 查看 线程数 窗口。 活动线程指示符已经更改。

  9. 在源窗口中,右击线程标记。 在快捷菜单上,指向 切换至 然后单击线程名称 /id 号。

    您现在已经了解了更改活动线程的三种方式:使用 线程数 窗口、 线程 框中 调试位置 工具栏和源窗口中的线程指示符。

    线程指示符,您只能切换到在特定位置停止的线程。 使用 线程数 窗口和 调试位置 工具栏,可以切换到所有线程。

冻结和解冻线程执行

冻结和解冻线程

  1. 线程数 窗口中,右击所有线程然后单击 冻结

  2. 查看活动线程列。 对竖线现在显示存在。 这两条蓝色竖线指示线程已冻结。

  3. 查看 挂起 列。 此时线程的挂起计数为 1。

  4. 右击冻结线程然后单击 解冻

    活动线程列和 挂起 列更改。

请参见

任务

如何:在调试时切换到另一个线程

其他资源

调试多线程应用程序