现已发布!阅读关于 11 月新增功能和修复的内容。

使用 Visual Studio Code 调试代码

Visual Studio Code 为各种类型的应用程序提供丰富的调试支持。VS Code 内置了对 JavaScript、TypeScript 和 Node.js 调试的支持。Visual Studio Marketplace 提供了各种调试扩展,可为 VS Code 添加对其他语言和运行时的调试支持。

本文介绍了 VS Code 的调试功能以及如何在 VS Code 中开始调试。您还将了解如何在 VS Code 中使用 Copilot 来加速设置调试配置并启动调试会话。

以下视频展示了如何在 VS Code 中开始调试。

调试器用户界面

下图显示了调试器用户界面的主要组件

Debugging diagram

  1. 运行和调试视图:显示与运行、调试和管理调试配置设置相关的所有信息。
  2. 调试工具栏:包含最常见的调试操作按钮。
  3. 调试控制台:使您能够查看与调试器中运行的代码输出进行交互。
  4. 调试侧边栏:在调试会话期间,使您能够与调用堆栈、断点、变量和监视变量进行交互。
  5. 运行菜单:包含最常见的运行和调试命令。

开始调试之前

  1. Visual Studio Marketplace 为您的语言或运行时安装调试扩展。

    VS Code 内置了对 JavaScript、TypeScript 和 Node.js 调试的支持。

  2. 为您的项目定义调试配置。

    对于简单的应用程序,VS Code 会尝试运行和调试当前活动的文件。对于更复杂的应用程序或调试场景,您需要创建 launch.json 文件来指定调试器配置。获取有关创建调试配置的更多信息。

    提示

    VS Code 中的 Copilot 可以帮助您生成 launch.json 文件。有关更多信息,请参阅使用 Copilot 生成调试配置

  3. 在代码中设置断点。

    断点是您可以在代码行上设置的标记,用于告诉调试器在执行到达该行时暂停执行。您可以通过单击编辑器中行号旁边的边槽来设置断点。

    有关断点的更多信息,请参阅使用断点

开始调试会话

要在 VS Code 中开始调试会话,请执行以下步骤

  1. 打开包含要调试的代码的文件。

  2. 使用 F5 键开始调试会话,或在运行和调试视图 (workbench.view.debug) 中选择运行和调试

    Simplified initial Run and Debug view

    对于更复杂的调试场景,例如附加到正在运行的进程,您需要创建 launch.json 文件来指定调试器配置。获取有关调试配置的更多信息。

  3. 从可用调试器列表中选择要使用的调试器。

    VS Code 会尝试运行和调试当前活动的文件。对于 Node.js,VS Code 会在 package.json 文件中检查 start 脚本以确定应用程序的入口点。

  4. 当调试会话开始时,会显示调试控制台面板并显示调试输出,并且状态栏会改变颜色(默认颜色主题为橙色)。

    debug session

  5. 状态栏中的调试状态显示活动的调试配置。选择调试状态以更改活动的启动配置并开始调试,而无需打开运行和调试视图。

    Debug status

调试操作

一旦调试会话开始,调试工具栏就会出现在窗口顶部。工具栏包含用于控制调试会话流程的操作,例如单步执行代码、暂停执行和停止调试会话。

Screenshot that shows the Debug toolbar, with icons to control the flow of the debug session.

下表描述了调试工具栏中可用的操作

操作 描述
继续/暂停
F5
继续:恢复正常的程序/脚本执行(直到下一个断点)。
暂停:检查当前行正在执行的代码并逐行调试。
单步跳过
F10
将下一个方法作为单个命令执行,而不检查或跟随其组件步骤。
单步调试
F11
进入下一个方法以逐行跟踪其执行。
单步跳出
⇧F11 (Windows, Linux Shift+F11)
当位于方法或子例程内部时,通过完成当前方法的剩余行返回到较早的执行上下文,就好像它是一个单个命令一样。
重新启动
⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)
终止当前程序执行并使用当前运行配置再次开始调试。
停止
⇧F5 (Windows, Linux Shift+F5)
终止当前程序执行。

如果您的调试会话涉及多个目标(例如,客户端和服务器),调试工具栏会显示会话列表并允许您在它们之间切换。

提示

使用 debug.toolBarLocation 设置来控制调试工具栏的位置。它可以是默认的 floating(浮动)、停靠在运行和调试视图中的 docked(停靠),或者 hidden(隐藏)。浮动调试工具栏可以水平拖动,也可以拖到编辑器区域(距离顶部边缘一定距离)。

Breakpoints

断点是一种特殊的标记,可以在代码执行到特定点时暂停执行,以便您可以检查该点应用程序的状态。VS Code 支持多种类型的断点。

设置断点

要设置或取消设置断点,请单击编辑器边距或在当前行上使用 F9

  • 编辑器边距中的断点通常显示为红色实心圆圈。
  • 禁用的断点有一个灰色的实心圆圈。
  • 当调试会话开始时,无法向调试器注册的断点会变成一个灰色的空心圆圈。如果在没有实时编辑支持的调试会话运行时编辑了源,也可能会发生同样的情况。

或者,通过启用设置 debug.showBreakpointsInOverviewRuler,可以在编辑器的概览标尺中显示断点。

breakpoints in overview ruler

要对断点进行更多控制,请使用运行和调试视图的断点部分。此部分列出了代码中的所有断点,并提供额外的操作来管理它们。

Breakpoints

断点类型

条件断点

一个强大的 VS Code 调试功能是能够根据表达式、命中次数或两者的组合设置条件。

  • 表达式条件:当表达式评估为 true 时,断点被命中。
  • 命中次数命中次数控制在中断执行之前需要命中多少次断点。是否遵守命中次数以及表达式的确切语法可能因调试器扩展而异。
  • 等待断点:当另一个断点被命中时,断点被激活(触发断点)。

添加条件断点

  1. 创建条件断点

    • 右键单击编辑器边距并选择添加条件断点
    • 使用命令面板中的添加条件断点命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。
  2. 选择要设置的条件类型(表达式、命中次数或等待断点)。

    HitCount

为现有断点添加条件

  1. 编辑现有断点

    • 右键单击编辑器边距中的断点并选择编辑断点
    • 运行和调试视图的断点部分中选择现有断点旁边的铅笔图标。
  2. 编辑条件(表达式、命中次数或等待断点)。

如果调试器不支持条件断点,则添加条件断点编辑条件操作将不可用。

触发断点

触发断点是一种条件断点类型,一旦另一个断点被命中,它就会被启用。当诊断仅在特定先决条件之后发生的代码失败情况时,它们会很有用。

可以通过右键单击字形边距,选择 添加触发断点,然后选择哪个其他断点启用此断点来设置触发断点。

内联断点

内联断点仅在执行到达与内联断点关联的列时才会被命中。这在调试包含多个语句的单行代码(例如,经过压缩的代码)时很有用。

内联断点可以使用 ⇧F9 (Windows, Linux Shift+F9) 或通过调试会话期间的上下文菜单进行设置。内联断点在编辑器中内联显示。

内联断点也可以有条件。可以通过编辑器左边距中的上下文菜单编辑一行上的多个断点。

函数断点

调试器可以支持通过指定函数名称来创建断点,而不是直接在源代码中放置断点。这在源代码不可用但函数名称已知的情况下很有用。

要创建函数断点,请在断点部分标题中选择+按钮并输入函数名称。函数断点在断点部分中显示为红色三角形。

数据断点

如果调试器支持数据断点,可以从变量视图中的上下文菜单设置它们。在值更改/读取/访问时中断命令会添加一个数据断点,当基础变量的值更改/被读取/被访问时,该断点会被命中。数据断点在断点部分中显示为红色六边形。

日志点

日志点是断点的一种变体,它不会中断调试器,而是将消息记录到调试控制台。日志点可以帮助您节省时间,而无需在代码中添加或删除日志语句。

日志点由菱形图标表示。日志消息是纯文本,但也可以包含在大括号 ('{}') 中评估的表达式。

要添加日志点,请右键单击编辑器左边距并选择添加日志点,或使用命令面板中的调试:添加日志点...命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。您还可以配置设置 debug.gutterMiddleClickAction 以在编辑器边槽中按鼠标中键时切换日志点。

Logpoints

就像常规断点一样,日志点可以启用或禁用,也可以由条件和/或命中次数控制。

注意

调试器扩展可以选择实现日志点或不实现。

数据检查

运行和调试视图

在调试会话期间,您可以在运行和调试视图的变量部分中检查变量和表达式,或者通过将鼠标悬停在编辑器中的源上。变量值和表达式评估与调用堆栈部分中选定的堆栈帧相关。

Screenshot of the Variables section in the Run and Debug view.

要在调试会话期间更改变量的值,请右键单击变量部分中的变量并选择设置值 (Enter (Windows, Linux F2))。

此外,您可以使用复制值操作复制变量的值,或使用复制为表达式操作复制用于访问变量的表达式。然后,您可以在监视部分中使用此表达式。

变量和表达式也可以在运行和调试视图的监视部分中进行评估和监视。

Screenshot of the Watch section in the Run and Debug view.

要按名称或值过滤变量,请在焦点位于变量部分时使用 ⌥⌘F (Windows, Linux Ctrl+Alt+F) 键盘快捷方式,然后键入搜索词。

Screenshot of the filter control in the Variables section.

调试控制台 REPL

表达式可以使用调试控制台 REPL (Read-Eval-Print Loop) 功能进行评估。要打开调试控制台,请使用调试窗格顶部的调试控制台操作,或使用查看:调试控制台命令 (⇧⌘Y (Windows, Linux Ctrl+Shift+Y))。

在您按下 Enter 键后,表达式会被评估,并且调试控制台 REPL 会在您键入时显示建议。如果您需要输入多行,请在行之间使用 Shift+Enter,然后按 Enter 将所有行发送进行评估。

调试控制台输入使用活动编辑器的模式,这意味着调试控制台输入支持语法着色、缩进、引号自动关闭以及其他语言功能。

Screenshot of the Debug Console.

注意

您必须处于活动的调试会话中才能使用调试控制台 REPL。

多目标调试

对于涉及多个进程(例如,客户端和服务器)的复杂场景,VS Code 支持多目标调试。启动第一个调试会话后,您可以启动另一个调试会话。一旦第二个会话启动并运行,VS Code UI 就会切换到多目标模式

  • 各个会话现在在调用堆栈视图中显示为顶级元素。

    Callstack View

  • 调试工具栏显示当前活动会话(所有其他会话都可以在下拉菜单中找到)。

    Debug Actions Widget

  • 调试操作(例如,调试工具栏中的所有操作)都在活动会话上执行。活动会话可以通过使用调试工具栏中的下拉菜单或在调用堆栈视图中选择不同的元素来更改。

远程调试

VS Code 不支持所有语言的内置远程调试。远程调试是您正在使用的调试扩展的一项功能,您应该查阅 Marketplace 中扩展的页面以获取支持和详细信息。

但是,有一个例外:VS Code 中包含的 Node.js 调试器支持远程调试。有关更多信息,请参阅Node.js 调试

调试器扩展

VS Code 内置了对 Node.js 运行时的调试支持,可以调试 JavaScript、TypeScript 或任何其他转换为 JavaScript 的语言。

对于调试其他语言和运行时(包括 PHPRubyGoC#PythonC++PowerShell许多其他),请在 Visual Studio Marketplace 中查找 Debuggers 扩展,或在顶层“运行”菜单中选择安装附加调试器

以下是几个包含调试支持的流行扩展

后续步骤

要了解 VS Code 的 Node.js 调试支持,请查看

  • Node.js - 描述了 VS Code 中包含的 Node.js 调试器。
  • TypeScript - Node.js 调试器也支持 TypeScript 调试。

要查看有关调试基础知识的教程,请查看此视频

要了解有关 VS Code 中 Copilot 和 AI 辅助调试的更多信息

要了解通过 VS Code 扩展对其他编程语言的调试支持

要了解有关 VS Code 的任务运行支持,请访问

  • 任务 - 描述了如何使用 Gulp、Grunt 和 Jake 运行任务以及如何显示错误和警告。

要编写自己的调试器扩展,请访问

  • 调试器扩展 - 使用模拟示例说明创建 VS Code 调试扩展所需的步骤。

常见问题

支持哪些调试场景?

VS Code 开箱即用地支持在 Linux、macOS 和 Windows 上调试基于 Node.js 的应用程序。Marketplace 中提供的VS Code 扩展支持许多其他场景。

© . This site is unofficial and not affiliated with Microsoft.