首先查看 Visual Studio 调试器

本主题介绍 Visual Studio 提供的调试器工具。 在 Visual Studio 上下文中,当你 调试应用时,通常意味着以附加调试器的方式运行应用程序(即调试模式)。 执行此操作时,调试器提供了许多方法来查看代码在运行时正在执行的操作。 可以逐步浏览代码并查看变量中存储的值,可以设置变量的监视,以查看值何时发生更改,可以检查代码的执行路径,等等。如果这是你第一次尝试调试代码,建议在完成本主题之前阅读 调试绝对初学者。 如果尝试执行特定任务并需要知道要使用哪些功能,请参阅 调试器功能查找器。 若要尝试 AI 辅助调试,请参阅 使用 Copilot 进行调试

此处介绍的功能适用于 C#、C++、Visual Basic、JavaScript 和 Visual Studio 支持的其他语言(除非另有说明)。

设置断点并启动调试器

当你知道代码行或要在运行时详细检查的代码部分时,断点是一项有用的功能。 如需详细了解断点的不同类型(例如条件断点和函数断点),请参阅使用断点

若要调试,需要使用附加到应用进程的调试器启动应用。 为此,请执行以下操作:

  • F5调试 > 启动调试),这是最常见的方法。

但是,现在你可能尚未设置任何断点来检查应用代码,因此我们将首先执行此操作,然后开始调试。 断点是可靠调试中最基本和必不可少的功能。 断点指示 Visual Studio 应在哪个位置挂起你的运行代码,以使你可以查看变量的值或内存的行为,或确定代码的分支是否运行。

如果在代码编辑器中打开了文件,可以通过单击代码行左侧的边距来设置断点。

设置断点

设置断点

按 F5(“调试”>“开始调试”)或调试工具栏中的“开始调试”按钮 开始调试,调试器将运行至它遇到的第一个断点。 如果应用尚未运行,F5 将启动调试器并在第一个断点处停止。

我们提供了大多数命令的键盘快捷方式,因为它们可以更快地导航应用代码。 等效命令(如菜单命令)显示在括号中。有关使用步骤命令的更多详细信息,请参阅 在调试器中导航代码

要在附加了调试器的情况下启动应用,请按 F11(“调试”>“单步执行”)。 F11 是“单步执行”命令,每按一次,应用就执行下一个语句。 使用 F11 启动应用时,调试器会中断执行的第一个语句。

F11 单步执行

F11 单步执行

黄色箭头表示调试器暂停的语句,该语句也会在同一点暂停应用执行(此语句尚未执行)。

F11 是最详细地检查执行流的好方法。 (为了更快地通过代码移动,我们还会显示一些其他选项。默认情况下,调试器跳过非用户代码(如果需要更多详细信息,请参阅 仅我的代码)。

备注

在托管代码中将看到一个对话框,询问你是否希望在自动跳过属性和运算符时收到通知(默认行为)。 若稍后想更改设置,请在“调试”下的“工具”>“选项”菜单中禁用“单步跳过属性和运算符”设置

单步跳过代码以跳过函数

如果所在的代码行是函数或方法调用,则可以按 F10(“调试”>“单步跳过”)而不是按 F11

按 F10 将使调试器前进,但不会单步执行应用代码中的函数或方法(代码仍将执行)。 通过按 F10,可以跳过你不感兴趣的代码。 这样,可以快速获取你更感兴趣的代码。 有关使用步骤命令的详细信息,请参阅在调试器中导航代码

使用鼠标快速运行到代码中的某个点

使用“运行时单击”按钮类似于设置临时断点。 此命令还可用于在应用代码的可见区域中快速完成操作。 你可在任何打开的文件中使用“运行到单击处”。 有关此功能和类似导航功能的更多详细信息,请参阅运行到代码中的特定位置

在调试器中,将鼠标悬停在代码行上,直到“运行到单击处”(将执行运行到此处)按钮 这是 Visual Studio 调试器中“运行到单击处”按钮的屏幕截图。该按钮指示执行应运行到按钮所在的代码行。 出现在左侧

Visual Studio 调试器的屏幕截图,其中显示“运行到单击处”按钮出现在函数的调用的左侧。

Visual Studio 调试器的屏幕截图,其中显示“运行到单击处”按钮出现在函数的调用的左侧。

备注

自 Visual Studio 2017 起,可用使用“运行到单击处”(将执行运行到此处)按钮

单击“运行到单击处”(将执行运行到此处)按钮。 调试器将前进到单击的代码行。

使调试器从当前函数中跳出

有时你可能希望继续调试会话,但在整个当前函数中一直使调试器前进。

按 Shift + F11(或选择“调试”>“单步跳出”)

此命令将恢复应用执行(并推进调试器),直到当前函数返回。

运行到光标处

编辑代码(而不是在调试器中暂停)时,右键单击应用中的一行代码,然后选择 “运行到光标”(或按 Ctrl + F10)。 此命令开始调试,并在当前代码行上设置临时断点。 有关此功能和类似导航功能的更多详细信息,请参阅运行到代码中的特定位置

运行到光标处

运行到光标处

如果设置了断点,调试器将在它命中的第一个断点上暂停。

按 F5,直至到达在其上选择了“运行到光标处”的代码行

编辑代码并希望快速设置临时断点并同时启动调试器时,此命令非常有用。

备注

调试时可使用“调用堆栈”窗口中的“运行到光标处”

快速重启应用

单击调试工具栏中的“重启重启应用 按钮(或 按 ctrl + Shift + F5)。

重启时,它可以节省时间,而不是停止应用并重启调试器。 调试器在执行代码命中的第一个断点处暂停。

如果您确实希望停止调试器并返回代码编辑器,可以按下红色的停止 停止调试 按钮,而不是按 重启

实时代码编辑

Visual Studio 2022 支持调试时实时代码编辑。 有关详细信息,请参阅:

编辑代码并继续调试(C#、VB、C++、XAML)

在 Visual Studio 支持的大多数语言中,可以在调试会话中编辑代码并继续调试。 若要使用此功能,请在调试器暂停时将光标点击到代码中,进行编辑,然后按 F5F10F11 继续调试。 有关功能使用和功能限制的详细信息,请参阅编辑并继续

编辑并继续调试

若要在调试会话期间修改 XAML 代码,请参阅 使用 XAML 热重载编写和调试正在运行的 XAML 代码。

使用数据提示检查变量

现在,你已经对环境有了一定程度的熟悉,这是一个很好的机会,可以开始使用调试器检查应用程序的状态和变量。 允许你检查变量的功能是调试器的某些最有用的功能,并且有不同的方法可以执行此操作。 通常,当您尝试调试问题时,您是在检查变量是否在特定应用状态中存储了预期的值。 有关使用数据提示的详细信息,请参阅在数据提示中查看数据值

在调试器中暂停时,将鼠标悬停在对象上,可以看到其值或默认属性值。

查看数据提示

查看数据提示

如果变量具有属性,则可以展开该对象以查看其所有属性。

通常,在调试时,需要快速检查对象上的属性值,并且数据提示是执行此操作的好方法。

使用“自动”和“局部变量”窗口检查变量

在“自动变量”窗口中,可看到变量及其当前值和类型。 “自动”窗口显示当前行或前一行使用的所有变量(在 C++ 中,该窗口显示前三个代码行中的变量。查看文档以了解特定于语言的行为)。 有关使用这些窗口的详细信息,请参阅在“自动变量”和“局部变量”窗口中检查变量

调试时,请查看代码编辑器底部的 Autos 窗口。

自动窗口

自动窗口

备注

在 JavaScript 中,支持 局部变量 窗口,但不支持 自动 窗口。

接下来,查看“局部变量”窗口。 “局部变量”窗口显示当前范围中的变量

“局部变量”窗口

“局部变量”窗口

在此示例中,this 对象和对象 f 处于范围内。 有关详细信息,请参阅在“自动变量”窗口和“局部变量”窗口中检查变量

查看方法调用的返回值

在 .NET 和 C++ 代码中,当你进行单步调试或跳出方法调用时,可以在 Autos 窗口中查看返回值,这在返回值未存储于局部变量时非常有用。 有关详细信息,请参阅 查看方法调用的返回值。

从 Visual Studio 2022 版本 17.12 预览版 3 开始,您还可以直接查看方法调用的返回值,而不仅仅是在“Autos”窗口中查看。

显示方法调用的返回值的屏幕截图。

设置监视

您可以使用 监视 窗口来指定您希望关注的变量或表达式。 有关详细信息,请参阅使用“监视”窗口和“快速监视”窗口设置监视

调试时,右键单击对象并选择“添加监视”

监视窗口

监视窗口

在本示例中,你在对象上设置了监视,当在调试器中移动时,可看到其值发生了变化。 与其他变量窗口不同,观察 窗口始终显示你正在观察的变量(范围之外时,这些变量会变灰)。

检查调用堆栈

调用堆栈 窗口显示调用方法和函数的顺序。 最上面一行显示当前函数。 第二行显示调用的函数或属性,依次类推。 调用堆栈是检查和了解应用执行流的好方法。 有关详细信息,请参阅如何:检查调用堆栈

备注

调用堆栈 窗口类似于 Eclipse 等 IDE 中的“调试”透视。

在调试时单击 调用堆栈 窗口,该窗口默认在右下窗格中打开。

检查调用堆栈

检查调用堆栈

可以双击一行代码来查看该源代码,并更改调试器正在检查的当前范围。 此操作不会使调试器前进。

还可以使用 调用堆栈 窗口中的右键单击菜单来执行其他操作。 例如,你可将断点插入到指定的函数中,使用“运行到光标处”重启应用,然后检查源代码

检查异常

当应用引发异常时,调试器会转到引发异常的代码行。 有关详细信息,请参阅 使用异常帮助程序检查异常。

异常帮助程序

在此示例中,异常帮助程序显示 System.NullReferenceException 异常和错误消息,指出对象引用未设置为对象的实例。 并且,它告诉我们,尝试调用 Trim 方法时,字符串值为 null。

异常帮助程序

在此示例中,异常帮助程序 显示一个 System.Argument 异常和一条错误消息,指出路径不是法律形式。 因此,我们知道错误发生在方法或函数参数上。

在此示例中,DirectoryInfo 调用为存储在 value 变量中的空字符串提供了错误。

异常帮助程序是帮助调试错误的好功能。 你还可以执行其他操作,如查看错误详细信息及从异常帮助程序添加监视。 或者,如有需要可更改引发特定异常的条件。 有关如何在代码中处理异常的详细信息,请参阅 调试技术和工具

展开 异常设置 节点以查看如何处理此类异常的更多选项,但是在本次演练中你不需要更改任何内容!

提示

如果你有 Copilot,则可以在调试异常时获得 AI 辅助。 只需查找“询问 Copilot”按钮 “询问 Copilot”按钮的屏幕截图。。 有关详细信息,请参阅使用 Copilot 进行调试

获取 AI 帮助

如果你有 Copilot,则可以在调试时获得 AI 帮助。 有关详细信息,请参阅使用 Copilot 进行调试。 调试时,还可以查找 Ask CopilotAsk Copilot 按钮的屏幕截图。 按钮。 在这些方案中,Copilot 已经知道你的问题的上下文,因此你无需在 Copilot 聊天中自行提供上下文。

配置调试

可以将项目配置为 调试或发布配置,配置项目属性用于调试,或者配置 常规设置 以进行调试。 此外,还可以将调试器配置为使用 DebuggerDisplay 属性等特性来显示自定义信息,对于 C/C++,可使用 NatVis 框架

调试属性特定于每个项目类型。 例如,可以指定要在启动应用程序时传递给应用程序的参数。 可以通过右键单击解决方案资源管理器中的项目并选择 属性来访问特定于项目的属性。 调试属性通常显示在 生成“调试”选项卡中,具体取决于特定的项目类型。

从 Visual Studio 2022 开始,.NET 项目的“调试”选项卡提供了指向调试启动配置文件 UI 的链接,你可以在其中设置与调试相关的属性。

项目属性

项目属性

在 Azure 应用服务中调试实时 ASP.NET 应用

若要在 Azure 应用服务中进行调试,请参阅 调试 Azure 应用

对于 Visual Studio Enterprise(仅限该版本),当执行你感兴趣的代码时,Snapshot Debugger 会为生产中的应用拍摄快照。 若要指示调试器拍摄快照,请在代码中设置快照点和日志点。 调试器使你能够确切地查看出了什么问题,而不会影响生产应用程序的流量。 快照调试器可帮助你大幅减少解决生产环境中出现的问题所需的时间。

启动快照调试器

快照集合可用于在 Azure 应用服务中运行的 ASP.NET 应用程序。 ASP.NET 应用程序必须在 .NET Framework 4.6.1 或更高版本上运行,ASP.NET Core 应用程序必须在 Windows 上的 .NET Core 2.0 或更高版本上运行。

有关详细信息,请参阅 使用 Snapshot Debugger调试实时 ASP.NET 应用。

使用 IntelliTrace 后退查看快照 (Visual Studio Enterprise)

IntelliTrace 后退会在每个断点处及调试器步骤事件发生时自动拍摄应用程序的快照。 通过录制的快照可以返回到以前的断点或步骤,并查看应用程序过去的状态。 如果想要查看以前的应用程序状态,但不想重启调试或重新创建所需的应用状态,IntelliTrace 后退可以节省时间。

可以使用“调试”工具栏中的 “后退”“单步向前”按钮来导航和查看快照。 这些按钮用于导航 诊断工具 窗口中 “事件” 选项卡内显示的事件。

“后退”和“向前”按钮

有关详细信息,请参阅使用 IntelliTrace 检查上一应用状态页。

调试性能问题

如果应用运行速度太慢或使用过多的内存,则可能需要提前使用分析工具测试应用。 有关分析工具(如 CPU 使用情况工具和内存分析器)的详细信息,请参阅 首先查看分析工具

在本教程中,你快速了解了许多调试器功能。 你可能希望更深入地了解其中一项功能,例如断点。