掌握 Visual Studio 2010 调试 - 初学者指南






4.95/5 (293投票s)
介绍断点、数据提示、监视窗口、多线程调试、并行程序调试和 IntelliTrace 调试等所有调试功能。
目录
引言
在软件开发生命周期中,测试和缺陷修复所花费的时间比实际编写代码的时间要长。通常,调试是一个找出程序中的缺陷并修复它们的过程。缺陷修复发生在调试之后,或者可以说它们是相关的。当您的代码中存在一些缺陷时,首先需要找出缺陷的根本原因,这称为调试。找出根本原因后,就可以修复缺陷,使程序按预期行为运行。
那么如何调试代码呢?Visual Studio IDE 为我们提供了许多调试应用程序的工具。有时,识别缺陷的根本原因的调试活动会花费很长时间。但是 VS IDE 提供了许多便捷的工具,可以帮助更好地调试代码。调试器功能包括错误列表、添加断点、可视化程序流程、控制执行流程、数据提示、监视变量等等。其中许多对于许多开发人员来说很常见,而另一些则不常见。在本文中,我讨论了 VS IDE 用于调试的所有重要功能,例如断点、断点的标签化和保存、为断点设置条件和筛选、数据提示、监视窗口、多线程调试、线程窗口、并行调试概述以及 IntelliTrace 调试概述。我希望这对初学者入门以及成为调试专家非常有帮助。请注意,目标 Visual Studio 版本是 Visual Studio 2010。许多功能在旧版本中是通用的,但标记断点、固定数据提示、多线程调试、并行调试和 IntelliTrace 等功能已添加到 VS 2010。请提供您宝贵的建议和反馈以改进我的文章。
如何开始?
您可以从 VS IDE 的“调试”菜单开始调试。在“调试”菜单中,您可以选择“开始调试”或直接按 F5 启动程序。如果您在代码中放置了断点,则执行将自动开始。

还有一种启动调试的方法是“附加进程”。附加进程将启动应用程序的调试会话。我们通常对 ASP.NET Web 应用程序的附加进程调试非常熟悉。我在 CodeProject 上发布了两篇关于同一主题的文章。您可以参考一下。
我们通常通过在可能出现问题的代码位置放置断点来开始调试任何应用程序。那么,让我们从断点开始。
断点
断点用于通知调试器在哪里以及何时暂停程序的执行。您可以通过单击代码的侧边栏来放置断点,或者只需在行首按 F9。因此,在设置断点之前,您应该知道代码中出了什么问题以及需要在哪里停止。当调试器到达断点时,您可以使用不同的调试工具检查代码中出了什么问题。

使用断点进行调试
您已经在代码中设置了一个断点,您希望在该位置暂停执行。然后按 **“F5”** 启动程序。当程序到达断点时,执行将自动暂停。现在您有多种选项来检查您的代码。命中断点后,断点行将显示为黄色,这表示这是下一行将要执行的代码。
现在,在中断模式下,您有几种可用的命令,可以使用它们继续进一步调试。

单步跳过
调试器命中断点后,您可能需要逐行执行代码。 **“逐行执行” [ F10 ]** 命令用于逐行执行代码。这将执行当前突出显示的行,然后暂停。如果您在突出显示方法调用语句时选择了 F10,执行将在调用语句的下一行之后停止。逐行执行会一次性执行整个方法。

单步进入
这与逐行执行类似。唯一的区别是,如果当前突出显示的部分是任何方法调用,调试器将进入方法内部。单步步入的快捷键是 **“F11”**。

跳出
这与您在方法内部进行调试有关。如果您在当前方法中按 **Shift - F11**,执行将完成该方法的执行,并在调用它的下一条语句处暂停。
Continue
这就像再次运行您的应用程序。它将继续程序流程,直到遇到下一个断点。继续的快捷键是 **“F5”**。
设置下一条语句
这是一个非常有趣的功能。设置下一条语句允许您在调试时 **更改程序的执行路径**。如果您的程序在某一行暂停,并且您想更改执行路径,**转到该特定行**,**右键单击**该行,然后从上下文菜单中选择 **“设置下一条语句”**。您会看到,执行会转到该行,而不会执行前面的代码行。当您发现某行代码可能会导致应用程序崩溃,并且您不想在该时间点中断时,这非常有用。设置下一条语句的快捷键是 **Ctrl + Shift + F10**。

显示下一条语句 [ Ctrl+* ]
此行标记为黄色箭头。这些行表示当程序继续执行时,它们将是下一条要执行的语句。
断点标签
这是 VS 2010 中的一项新功能。它用于更好地管理断点。它使我们能够更好地分组和筛选断点。这是一种断点的分类。如果您有不同类型的断点,它们与特定功能相关,您可以为它们命名,并根据需要启用、禁用、筛选。为了理解整个功能,让我们假设您有下面的代码块,您想调试它。
class Program
{
static void Main(string[] args)
{
string[] strNames = { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6" };
foreach (string name in strNames)
{
Console.WriteLine(name); // BreakPoint
}
int temp = 4;
for (int i = 1; i <= 10; i++)
{
if (i > 6)
temp = 5;
}
}
public static void Method1()
{
Console.WriteLine("Break Point in Method1"); // BreakPoint
}
public static void Method2()
{
Console.WriteLine("Break Point in Method2"); // BreakPoint
Console.WriteLine("Break Point in Method2"); // BreakPoint
}
public static void Method3()
{
Console.WriteLine("Break Point in Method3"); // Breakpoint
}
}
如果运行程序,执行将在第一个断点处暂停。现在看看下面的图片,您有断点列表。

在提供的图片中,标签列是空白的。现在,看看我们如何为断点设置标签以及它的用途。要为任何断点设置标签,只需右键单击该行上的断点符号,或者您可以直接从断点窗口中设置。

**右键单击**断点,点击 **“编辑标签”** 链接,您可以为每个断点添加标签。根据示例代码,我已经为所有断点设置了非常简单易懂的名称。

让我们看看这个标签在调试时如何帮助我们。此时,所有断点都已启用。现在,如果您不想调试 `method2`,在一般情况下,您需要转到特定方法并逐个禁用断点,在这里您可以按标签名称筛选/搜索它们,并轻松地一起选择它们进行禁用。

这就是断点标签化。我向您展示的示例非常基础,但当您有大量代码、多个项目等时,它非常有用。
条件断点
假设您正在遍历大量数据,并且只想调试其中的一部分。这意味着您想在某些特定条件下暂停程序。Visual Studio 断点允许您设置条件断点。因此,只有当该条件满足时,调试器才会暂停执行。
为此,首先需要在您希望暂停执行的特定行上设置断点。然后只需“右键单击”**“红色”**断点图标。从那里,只需单击“条件”。

单击上下文菜单中的“条件”链接后,将出现以下屏幕,您可以在其中设置断点的条件。

让我们假设您有以下代码块
class Program
{
static void Main(string[] args)
{
string [] strNames = { "Name1","Name2", "Name3", "Name4", "Name5", "Name6"};
foreach(string name in strNames)
{
Console.WriteLine(name); // Breakpoint is here
}
}
}
您在 `Console.WriteLine()` 语句上设置了断点。运行程序时,执行将每次在 `for` **-** `each` 语句内部停止。现在,如果您希望代码仅在 `name="Name3"` 时中断。该怎么做?这很简单,您需要给出条件,例如 **`name.Equals("Name3")`**。

检查断点符号。它应该看起来像断点圆圈内的加号 (+) 符号,表示这是条件断点。

设置断点条件后,如果您运行应用程序进行调试,您会发现程序执行仅在满足带断点的给定条件时暂停。在这种情况下,当 `name="Name3"` 时。

**条件文本框中的 IntelliSense:** 我在这里演示的断点条件非常简单,可以轻松地在条件文本框中编写。有时,您可能还需要指定过大或复杂的条件。对于这种情况,您无需担心,VS IDE 也在条件文本框中提供了 IntelliSense。因此,每当您在条件框中输入任何内容时,您都会感觉像在编辑器中输入一样。请看下面的图片。

除了一个细节外,我几乎涵盖了所有关于条件断点的内容。在条件窗口中,您可以看到有两个选项可用
- **为 True** 和
- 已更改
我们已经看到了 **“为 True”** 选项的用途。 **“已更改”** 用于当您希望在某个特定值发生变化时中断代码。
导入/导出断点
这是另一个有趣的功能,您可以保存断点并在将来使用它们。Visual Studio 以 XML 格式保存断点。要保存断点,只需单击断点窗口中的 **“导出”** 按钮。

您可以将保存的 XML 文件用于未来,也可以将其传递给其他开发人员。您还可以基于标签搜索来保存断点。让我们快速查看一下 XML 文件内容。XML 文件是 `BreakpointCollection` 内的 `BreakPoints` 标签的集合。每个断点标签包含特定断点的信息,如*行号*、*是否启用*等。

如果您随时从代码中删除所有断点,只需单击 **“导入”** 断点按钮即可轻松导入它们。这将恢复您所有保存的断点。
**注意**:断点导入取决于您之前设置断点的行号。如果您的行号发生更改,断点将仅设置在之前的行号上,因此您将在意外的行上获得断点。
断点命中次数
断点命中次数用于跟踪调试器在某个特定断点处暂停了多少次。您还可以选择调试器何时停止。**“断点命中次数”** 窗口包含以下选项
- 始终中断
- 命中次数等于指定数字时中断
- 命中次数是指定数字的倍数时中断
- 命中次数大于或等于指定数字时中断。

默认设置为“始终”。因此,每当断点命中时,命中计数将自动增加。现在我们可以设置一些条件,如前所述。因此,基于该条件,断点将命中,计数器将增加。

让我们通过下面的示例代码块来探讨它
for (int i = 0; i <= 10; i++)
{
Console.WriteLine(i.ToString()); // Breakpoint
}
如果您希望代码在命中次数是 2 的倍数时中断,您需要从下拉列表中选择第三个选项。之后,您的代码行应仅在命中次数为 2、4、6... 等时中断。

到目前为止,我希望您对断点、标签、命中次数等非常清楚。现在让我们看看 **“断点命中时”** 选项。
断点命中时
除了正常的调试步骤之外,您还希望在命中断点时执行其他操作,例如打印消息或运行宏。对于这类场景,您可以选择此选项。只需右键单击断点即可打开此窗口。

您需要注意的第一件事是断点的符号。断点符号已更改为菱形,您还可以查看工具提示消息,其中指示了执行到达此处时将做什么。

断点筛选
您可以限制断点仅在某些进程或线程中命中。这在处理多线程程序时非常有帮助。要打开筛选器窗口,您需要右键单击断点并选择 **“筛选”**。

在筛选条件中,您可以设置进程名称、ID、计算机名称、线程 ID 等。我在多线程调试部分详细描述了它的用途。
数据提示
数据提示是一种高级工具提示消息,用于在应用程序调试期间检查对象或变量。当调试器命中断点时,如果您将鼠标悬停在任何对象或变量上,您可以看到它们的当前值。您甚至可以获取像 `dataset`、`datatable` 等复杂对象的详细信息。数据提示旁边有一个 **“+”** 符号,用于展开其子对象或变量。

几个月前,我发表了一篇关于 VS 2010 数据提示调试技巧的文章。
以下是一些您可以在应用程序调试过程中使用的一些很酷的功能。
调试期间固定检查值
在 Visual Studio 中调试时,我们通常将鼠标悬停在对象或变量上来检查当前值。这会显示被检查对象保存的当前数据项。但这只是暂时有效的,只要鼠标指向该对象,这些值就会可用。但在 Visual Studio 2010 Beta 2 中,有一个很棒的功能可以固定和取消固定此检查值。我们可以固定任意数量的任何对象及其子对象的值。请看下面的图片。

当您将鼠标悬停在检查对象上时,每个对象的属性、变量都会出现一个固定图标。单击该固定图标使其被固定。除非您手动关闭这些固定项,否则它们将在 IDE 中可见。
拖放固定数据提示
您可以轻松地将数据提示 **拖放** 到 Visual Studio IDE 中。当您需要在代码底部看到一些对象值列表时,这非常有用。您可以轻松地将这些固定数据提示拖到那里。

添加注释
您可以在固定数据提示上添加注释。要提供注释,您需要单击“**展开以查看注释**”按钮。这将弹出一个附加文本框以添加注释。

以下是添加固定检查值注释的一些演示。

上次会话调试值
这是 Visual Studio 2010 调试的另一个很棒的功能。如果您在调试期间固定了某些数据提示,固定项的值将保留在会话中。在正常编码模式下,如果您将鼠标悬停在固定图标上,它将显示上次调试会话的值,如下图所示。

导入导出数据提示
此功能与导入/导出断点非常相似。与断点一样,您可以将固定数据提示值导入和导出到 XML 文件中。

这些保存的数据提示可以在任何时候导入以进行进一步调试。XML 文件如下所示。

如果您想了解更多细节,可以进一步探索 XML 文件。:)
通过数据提示更改值
数据提示还用于在调试时更改值。这意味着它可以像监视窗口一样使用。您可以从固定对象列表中更改它们的值,以查看对程序的影响。

清除数据提示
您可以通过从“调试”菜单中选择 **“清除数据提示”** 来清除数据提示。有两个选项
- 清除所有数据提示
- 清除固定到 [文件名.Cs] 的所有数据提示
因此,如果您想清除项目/解决方案中的所有数据提示,只需选择第一个选项。但是,如果您想从特定文件中删除固定数据提示,则需要打开该特定文件,那里有第二个选项可供选择。您甚至可以通过右键单击单个固定数据提示并单击 **“清除”** 来删除它。

监视窗口
您可以称之为调查窗口。命中断点后,您想做的下一件事就是检查当前对象和变量的值。当您将鼠标悬停在变量上时,它会以数据提示的形式显示信息,您可以展开、固定、导入,我已经解释过了。有各种类型的监视窗口,如自动变量、局部变量等。让我们看看它们的详细信息。
局部变量
它会自动显示当前方法范围内的变量列表。如果您的调试器当前命中了某个特定断点,并且您打开了“自动变量”窗口,它将显示当前范围内的对象变量及其值。

自动变量
这些变量由 VS 调试器在调试过程中自动检测。Visual Studio 会确定哪些对象或变量对于当前代码语句很重要,并在此基础上列出 **“自动变量”**。自动变量的快捷键是 **“Ctrl + D + A”**。
监视
监视窗口用于按需添加变量。它显示您已添加的变量。您可以在监视窗口中添加任意数量的变量。要将变量添加到监视窗口,您需要**“右键单击”**变量,然后选择 **“添加到监视”**。
您还可以使用 **拖放** 将变量添加到监视窗口。如果您想从监视窗口删除任何变量,只需右键单击该变量并选择 **“删除监视”**。在调试窗口中,您还可以随时编辑变量的值。
有 4 个不同的监视窗口可供您并行使用。

如果上述窗口中的任何一行变量包含对象实例,则该变量旁边会有一个 **“+”** 符号,用于探索该对象变量的属性和成员。

创建对象 ID
Visual Studio 调试器还有另一项很棒的功能,您可以通过它为任何特定对象实例创建对象 ID。这对于您想在任何时候监视任何对象,即使它超出了作用域,都非常有帮助。要创建对象 ID,从监视窗口,您需要右键单击一个特定的对象变量,然后单击 **“创建对象 ID”**。

在为特定对象变量添加对象 ID 后,Visual Studio 会在该对象旁边添加一个数字 **“#”**,表示已创建一个对象 ID。

即时窗口
即时窗口非常常见,也是所有开发人员的最爱。在应用程序的调试模式下,如果您想更改变量值或执行某些语句而不影响当前的调试步骤,它非常有用。您可以从菜单 **调试** > **窗口** > **即时窗口** { **Ctrl + D, I** / **Alt + Ctrl - I** } 打开即时窗口。即时窗口有一组命令,可以在调试期间随时执行。它还支持 IntelliSense。在调试模式下,您可以在此处执行任何命令或执行任何代码语句。

这些对于所有开发人员来说都是非常常见的功能,所以我不会深入介绍即时窗口的每个命令。
调用堆栈
这些功能还可以提高调试期间的生产力。如果您有多个方法调用或嵌套调用遍布您的应用程序,并且在调试时,您想检查这个方法是从哪里调用的,**“调用堆栈”** 就派上用场了。调用堆栈窗口显示当前的方法调用嵌套。
在调用堆栈窗口中,如果您单击任何一行,它将指向 Visual Studio 代码编辑器中的实际代码行。您还可以通过选择不同类型的列来自定义调用堆栈行视图。要自定义,请右键单击 **“调用堆栈”** 窗口,然后从上下文菜单中选择或取消选择选项。

当您的应用程序中有多个方法调用,并且某个特定方法在某些特定情况下抛出异常时,调用堆栈就非常重要。那时,您可以使用调用堆栈查看该方法是从哪里被调用的,并根据此修复缺陷。
调试多线程程序
到目前为止,我所讨论的都是关于调试的基础知识,了解调试工具及其用途。现在让我们看看多线程场景。在这里,您将看到如何处理多线程程序调试,您的当前线程在哪里,线程执行顺序是什么,线程的状态是什么。在继续演示之前,让我们考虑您拥有以下代码片段,您想对其进行调试。
class ThreadTest
{
static void Main()
{
Thread t = new Thread(new ThreadStart(Go));
t.Name = "Thread 1";
Thread t1 = new Thread(new ThreadStart(Go));
t1.Name = "Thread 2";
t.Start();
t1.Start();
Go();
}
static void Go()
{
Console.WriteLine("hello!");
}
}
在示例代码中,您有三个不同的线程 - 主线程、线程 1、线程 2。我为方便您理解添加了线程名称。现在在 **“Go()”** 中设置一个断点并运行应用程序。当调试器命中断点时,按 **Ctrl+D,T** 或通过 **调试** > **窗口** > **线程** 导航。线程窗口将出现在屏幕上。
探索线程窗口
从调试菜单中选择线程窗口后,将出现以下屏幕。

默认情况下,线程窗口具有 ID、托管 ID、类别、名称、位置和优先级列。开始时,执行暂停在“主线程”。“黄色箭头”表示当前可执行线程。类别列表示线程的类别,例如主线程或工作线程。如果您检查线程位置,它只不过是 **命名空间** > **类** > **方法** 名称。在图中,它显示 **主线程** 将是下一个执行的。现在,通过按 **“F5”** 来探索下一步,看看线程窗口有什么变化。

因此,在按 F5 后,它跳转到线程 1 的下一步。您还可以检查主线程的当前位置。它显示“**睡眠/等待/加入**”,意味着正在等待某事完成。类似地,下一步将带您到线程 2。从线程窗口,您可以了解使用此调试器工具监视线程有多容易。
线程窗口中还有一个很棒的功能。您可以 **展开/折叠** *线程位置* 并查看下一步是什么。例如,如果您展开 **“主线程”** 的位置,它将看起来像下面的图:

标记“仅我的代码”
我上面解释的用于线程调试的示例代码非常简单。如果您有大量代码块和多个线程,会发生什么?那么,要识别哪个线程是您代码的一部分,哪个与您无关,将会非常困难。线程窗口提供了非常简单的功能来为属于您代码的所有线程设置“**标记**”。为此,您只需通过“**标记我的代码”** 选项来标记您的线程。

断点筛选 - 多线程调试
在断点部分讨论断点筛选时,我说断点筛选对于多线程调试模式非常有帮助。现在是时候探索它了。在我们当前的示例中,我们有三个线程:主线程、线程 1 和线程 2。现在,如果您希望**断点仅在“线程 2”上命中**怎么办?您将做什么?这就是断点筛选的用途。右键单击断点,从上下文菜单中选择“**筛选**”。现在在断点筛选窗口中,您需要填写筛选条件。根据您的要求,您需要指定“`ThreadName="Thread 2"`”。

这里 `ThreadName` 是您可以通过它进行筛选的一个条件,但您可以根据多个子句进行筛选,例如 `ThreadID`、`ProcessName`、`ProcessID` 等。设置断点筛选后,运行应用程序并打开“线程”窗口。

您会发现您的程序执行仅在 **“线程 2”** 执行期间暂停。
以上就是多线程应用程序调试的全部内容。希望您从中有所收获。让我们开始另一个非常重要的话题“并行调试”。
调试并行程序
这是 Visual Studio 2010 中新增的另一项很棒的功能,用于调试并行程序。并行编程是 .NET 4.0 带来的新功能。如果您想了解更多关于并行编程的信息,请在此处查看。
现在,并行程序的调试也是一个很大的话题。这里我将给您一个基本概述,以了解并行程序的调试。为了讨论它,让我们考虑您有以下代码段
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ParalleTaskDebugging
{
class Program
{
static void Main(string[] args)
{
var task_a = Task.Factory.StartNew(() => DoSomeWork(10000));
var task_b = Task.Factory.StartNew(() => DoSomeWork(5000));
var task_c = Task.Factory.StartNew(() => DoSomeWork(1000));
Task.WaitAll(task_a, task_b, task_c);
}
static void DoSomeWork(int time)
{
Thread.Sleep(time);
}
}
}
为了理解并行程序调试,我们需要了解两个窗口选项:
- 并行任务
- 并行堆栈
并行任务和并行堆栈
在继续讨论并行任务和并行堆栈之前,您需要了解线程窗口,我已经涵盖过了。在给定的代码中,您有三个不同的任务在做一些事情,一段时间后,所有任务都暂停了。这是有意为之,以检查每个任务的状态。要测试,请在 `DoSomeWork()` 方法中设置一个断点并运行应用程序。您会看到程序执行在断点处暂停。程序中断后,您可以转到 **调试** > **窗口** > 打开 **并行任务** 和 **并行堆栈** 窗口。我要求同时打开这两个窗口,只是因为您可以可视化正在发生的事情。

**并行任务**窗口将显示程序创建了哪些不同的任务以及它们的当前状态。另一方面,并行堆栈将显示所有线程创建的图形视图,包含任务,它们是如何关联的。如果您从并行堆栈中单击线程,它将显示与该线程相关的代码行(如图中的绿色箭头所示)。要继续,请按 F5。让我们看看接下来是什么。

在上图中,您可以找到其中一个任务已执行,而另外两个任务仍未执行。当前执行点设置为 `AsyncMethod_1`,因此如果您继续,该方法将首先执行,下次再执行其他方法。处理并行编程时,会出现许多情况,如死锁、依赖关系问题等。这些主题非常有趣且内容丰富。请查看文章的进一步学习部分以了解更多详细信息。
使用 IntelliTrace 进行调试 - 概述
这是 **Visual Studio 2010 IDE** 的另一个很棒的功能。IntelliTrace 调试有时被称为历史调试。IntelliTrace 在后台运行,记录您在调试期间所做的操作。当您需要先前事件或特定事件的信息时,您可以轻松地从 IntelliTrace 信息中获取,即应用程序的过去状态。在此模式下,您可以导航到记录的各种事件和步骤。在本节中,我将向您介绍如何使用 IntelliTrace 的基本概述。
这里我使用一个示例程序来向您展示 IntelliTrace 的作用。下面是示例代码块
class Program
{
static void Main(string[] args)
{
Console.WriteLine("IntelliTrackerTest");
CallTestMethod(5);
}
public static void CallTestMethod(int TestValue)
{
Console.WriteLine("In CallTestMethod : " + TestValue.ToString());
Console.WriteLine("Last Statement....");
}
}
运行程序并从“调试”菜单打开 **IntelliTrace** 窗口,您将找到以下屏幕添加到 Visual Studio 的右侧。

IntelliTrace 映射
您在代码和 **IntelliTracker 列表视图** 之间找到任何关系吗?我猜您应该找到了。如果没有,让我来解释一下。让我们看看下面的图片。

从图片中,我敢肯定您已经知道了 IntelliTrace 在做什么。是的,它正是 **记录/捕获** 您的代码在做什么。如果您调用一个方法,它会捕获。如果代码触发了一个事件,它会捕获。是的,在单个语句中,我将捕获所有内容。
现在,从 **IntelliTrace** 窗口,您可以导航到代码的任何部分,并查看内部发生了什么。如果您能获得调用堆栈,本地变量信息都会被记录下来。要导航,只需单击您想要探索的任何事件,该块将自动展开。

当您选择任何块时,它会自动展开,并且该行将被突出显示。根据给定的图片,我已经突出显示了第一个控制台部分,您可以看到相应的代码块也被突出显示。现在您可以轻松地将它们映射起来。在展开的块(**浅橙色**)中,有两个相关视图部分:**本地变量** 和 **堆栈调用**。我已经解释过本地变量和堆栈调用。但您能想象本地变量和调用堆栈在这里的用途吗?是的,您猜对了,它将向您显示所选块执行期间的本地变量和调用堆栈状态。多么棒的功能啊。

筛选 IntelliTrace 数据
如果您的 IntelliTrace 窗口中有大量已记录的信息,您可以轻松地对其进行筛选。您可以根据 **类别** 或 **线程** 筛选数据。例如,假设您只想查看与控制台相关的数据,只需勾选 **类别** 列表中的“**控制台**”。

**注意**:默认情况下,Visual Studio 将 IntelliTrace 信息存储在“*\\Microsoft Visual Studio\\10.0\\TraceDebugging*”位置的 **iTrace** 文件中。您可以更改位置。
使用 IntelliTrace 进行调试本身就是一个很大的话题。因此,要在这篇文章中全部涵盖对我来说非常困难。我只给您一个基本概述,以便您至少可以自己探索它。请查看进一步学习部分以了解更多信息。
VS 调试的有用快捷键
快捷键 | 描述 |
Ctrl-Alt-V, A | 显示自动窗口 |
Ctrl-Alt-B | 显示断点对话框 |
Ctrl-Alt-C | 显示调用堆栈 |
Ctrl-Shift-F9 | 清除项目中的所有断点 |
Ctrl-F9 | 启用或禁用当前代码行上的断点 |
Ctrl-Alt-E | 显示异常对话框 |
Ctrl-Alt-I | 显示即时窗口 |
Ctrl-Alt-V, L | 显示局部变量窗口 |
Ctrl-Alt-Q | 显示快速监视对话框 |
Ctrl-Shift-F5 | 终止当前调试会话,在必要时重新生成,然后开始新的调试会话。 |
Ctrl-F10 | 启动或恢复代码执行,然后在到达选定语句时暂停执行。 |
Ctrl-Shift-F10 | 将执行点设置为您选择的代码行 |
Alt-NUM * | 突出显示下一条语句 |
F5 | 如果当前未调试,则运行启动项目并附加调试器。 |
Ctrl-F5 | 在不调用调试器的情况下运行代码 |
F11 | 单步进入 |
Shift-F11 | 从过程中执行剩余的行 |
F10 | 执行下一行代码,但不会单步进入任何函数调用 |
Shift-F5 | 在中断模式和运行模式下可用,此操作将终止调试会话 |
Ctrl-Alt-H | 显示线程窗口以查看当前进程的所有线程 |
F9 | 在当前行设置或删除断点 |
Ctrl-Alt-W, 1 | 显示监视 1 窗口以查看变量或监视表达式的值 |
Ctrl-Alt-P | 显示进程对话框,允许您将调试器附加或分离到一个或多个正在运行的进程 |
Ctrl-D,V | IntelliTrace 事件 |
我在这里停下。希望您已欣赏完整篇文章。请分享您的反馈和建议。
进一步研究
摘要
本文涵盖了调试过程的基本知识。它描述了如何使用 VS IDE 调试应用程序。我解释了几乎所有重要的工具及其用途。对于并行程序调试,我只涵盖了基础知识。在进一步学习部分,有一篇关于并行程序调试的优秀文章。如果您有兴趣,请仔细阅读链接。我的主要目标是涵盖 Visual Studio 调试中几乎所有的可用实用程序。希望您从本文中学到了一些新东西。
请分享您宝贵的反馈和建议以进行改进。
历史
- 2010年5月6日:初次发布