本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

Visual Studio Code 调试配置

对于复杂的调试场景或应用程序,您需要创建一个launch.json文件用于指定调试器配置。例如,指定应用程序入口点、附加到正在运行的应用程序或设置环境变量。

要了解更多有关在 VS Code 中调试的信息,请参阅 Visual Studio Code 调试.

小贴士

VS Code 的 Copilot 可以帮助你为项目创建启动配置。获取更多关于使用 Copilot 生成启动配置的信息

启动配置

对于简单的应用程序或调试场景,您可以在没有特定调试配置的情况下运行和调试程序。使用F5键,VS Code将尝试运行您当前活动的文件。

然而,对于大多数调试场景,您需要创建一个调试配置(启动配置)。例如,指定应用程序入口点、附加到正在运行的应用程序或设置环境变量。创建启动配置文件也有好处,因为它允许您配置和保存调试设置细节与您的项目。

VS Code 将调试配置信息存储在launch.json文件位于.vscode 在你的工作区文件夹(项目根文件夹),或在你的 用户设置工作区设置

以下片段描述了一个用于调试Node.js应用程序的示例配置:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": ["<node_internals>/**"],
      "program": "${workspaceFolder}\\app.js"
    }
  ]
}

VS Code 还支持复合启动配置,可以同时启动多个配置。

注意

即使您没有在 VS Code 中打开文件夹,也可以调试简单的应用程序,但无法管理启动配置和设置高级调试。

创建调试配置文件

为了创建一个初步的launch.json文件:

  1. 选择在运行和调试视图中创建 launch.json 文件

    启动配置

  2. VS Code 尝试检测你的调试环境。如果它无法做到,你可以手动选择:

    调试环境选择器

    基于所选择的调试环境,VS Code 在 中创建了一个启动配置。launch.json文件。

  3. 在资源管理器视图中 (⌃M ⌘E (Windows, Linux ⌃+Shift+E)),注意 VS Code 创建了一个.vscode文件夹并添加了launch.json将文件传输到您的工作区。

    在资源管理器中的 launch.json

您现在可以编辑launch.json文件用于添加更多配置或修改现有配置。

添加一个配置到launch.json

向现有配置添加新配置launch.json,请使用以下方法之一:

  • 添加配置按钮,然后选择一个片段以添加预定义配置。
  • 如果您的光标位于配置数组内,请使用IntelliSense。
  • 选择运行 > 添加配置 菜单选项。

启动JSON建议

使用AI生成启动配置

在 VS Code 中使用 Copilot,您可以加速为项目创建启动配置的过程。要使用 Copilot 生成启动配置:

  1. 打开聊天视图,按 ⌃⌘I(Windows, Linux Ctrl+Alt+I,或从标题栏的 Copilot 菜单中选择 打开聊天

  2. 输入/开始调试聊天提示生成调试配置。

    或者,您也可以输入自定义提示,例如 为一个 Express 应用生成调试配置 #codebase.

    如果您的工作区有不同语言的文件,这将很有用。

    注意

    #代码库chat变量为Copilot提供了你项目的上下文,这有助于它生成更准确的回复。

  3. 应用建议的配置,然后开始调试。

使用启动配置开始调试会话

要开始一个调试会话,请使用启动配置:

  1. 选择名为Launch Program的配置,使用配置下拉菜单运行和调试视图中。

    可用配置列表与那些相匹配launch.json文件。

    显示启动配置下拉菜单的截图。

  2. 使用 F5 开始你的调试会话,或在 开始调试 (播放图标) 中选择 运行和调试 视图。

或者,您可以将您的配置通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 运行,通过筛选调试:选择并开始调试或输入'调试'选择您要调试的配置。

启动与附加配置

在 VS Code 中,有两种核心调试模式,LaunchAttach,它们处理两种不同的工作流程和开发者群体。根据您的工作流程,了解为项目配置哪种类型的调试可能会令人困惑。

如果你来自浏览器开发者工具背景,你可能不习惯从你的工具中“启动”,因为你的浏览器实例已经打开。当你打开开发者工具时,你只是附加开发者工具到你已打开的浏览器标签页上。另一方面,如果你来自服务器或桌面背景,让你的编辑器启动你的进程是相当正常的,并且你的编辑器会自动附加其调试器到新启动的进程上。

解释 launch 和 attach 之间差异的最佳方法是将 launch 配置视为如何在调试模式下启动你的应用的指南列表之前 VS Code 附着到它,而 attach 配置是连接 VS Code 调试器到已经正在运行的应用或进程的指南列表。

VS Code 调试器通常支持以调试模式启动程序或附加到已运行的程序。具体取决于请求附加发射),需要不同的属性,并且 VS Code 的launch.json验证和建议将有助于此。

Launch.json 属性

有很多launch.json 属性以支持不同的调试器和调试场景。您可以使用 IntelliSense (⌃Space (Windows, Linux Ctrl+Space)),一旦您为 指定了一个值,就可以看到可用属性的列表类型属性。在启动配置中可用的属性因调试器而异。

启动JSON建议

一个调试器可用的属性并不自动适用于其他调试器。如果你在启动配置中看到红色波浪线,请悬停在它们上以了解问题所在,并在启动调试会话之前尝试解决它们。

以下属性是每个启动配置的必需属性:

  • 类型- 此启动配置使用的调试器类型。每个已安装的调试扩展都会引入一种类型:节点例如,对于内置的Node调试器,或者PHPGO用于 PHP 和 Go 扩展。
  • 请求- 此启动配置的请求类型。目前,
    发射
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    附加支持以下内容。
  • 名字- 在调试启动配置下拉菜单中显示的读者友好型名称。

以下是一些所有启动配置都可用的可选属性:

  • 展示- 使用订单,和隐藏属性在展示对象,您可以在“调试”配置下拉菜单和“调试”快速选择中对配置和化合物进行排序、分组和隐藏。
  • 预启动任务 - 要在调试会话开始前启动一个任务,请将此属性设置为在 tasks.json 中指定的任务标签(在工作区的 .vscode文件夹)。或者,可以设置为${默认构建任务}使用您的默认构建任务。
  • 发布调试任务 - 在调试会话的最后启动任务,将此属性设置为在 tasks.json 中指定的任务名称(在工作区的 .vscode文件夹)。
  • 内部控制台选项- 此属性控制在调试会话期间调试控制台面板的可见性。
  • 调试服务器 - 仅限调试扩展作者:此属性允许您连接到指定端口,而不是启动调试适配器。
  • 服务器就绪动作 - 如果您希望在程序在调试控制台或集成终端中输出特定消息时在网页浏览器中打开一个URL。详情请参见下面的在调试服务器程序时自动打开一个URI部分。

许多调试器支持以下属性中的一些:

  • 程序- 可执行文件或在启动调试器时运行的文件
  • 参数- 传递给要调试的程序的参数
  • 环境- 环境变量(值可以用来“取消定义”一个变量
  • 环境文件- dotenv文件的路径,其中包含环境变量
  • 当前工作目录- 当前工作目录,用于查找依赖项和其他文件
  • 端口- 连接运行中的进程时的端口
  • 停止进入- 程序启动时立即中断
  • 控制台- 使用什么类型的控制台,例如,内部控制台集成终端,或外部终端

变量替换

VS Code 提供了常用路径和其他值作为变量,并支持在字符串中进行变量替换launch.json这意味着在调试配置中,您不需要使用绝对路径。例如,${工作区文件夹}给定一个工作区文件夹的根路径,${文件}文件在活动编辑器中打开,并且${env:Name}环境变量 'Name'。

您可以在变量参考中查看所有预定义变量的完整列表,或者在内调用IntelliSenselaunch.json字符串属性。

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",
  "cwd": "${workspaceFolder}",
  "args": ["${env:USERNAME}"]
}

平台特定属性

VS Code 支持定义调试配置设置(例如,传递给程序的参数),这些设置可以依赖于正在运行调试器的操作系统。要实现这一点,请在launch.json文件并在此文字内部指定相应的属性。

以下示例展示了如何传递"参数"在 Windows 上以不同的方式运行程序:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/node_modules/gulp/bin/gulpfile.js",
      "args": ["myFolder/path/app.js"],
      "windows": {
        "args": ["myFolder\\path\\app.js"]
      }
    }
  ]
}

有效的操作系统属性是"Windows"适用于 Windows,"linux"对于 Linux,并且"osx"适用于 macOS。操作系统特定作用域中定义的属性会覆盖全局作用域中定义的属性。

类型属性不能放置在特定平台的区域内,因为类型间接地确定了远程调试场景中的平台,这将导致一个循环依赖。

在以下示例中,调试程序总是在入口处停止,但在macOS上除外:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/node_modules/gulp/bin/gulpfile.js",
      "stopOnEntry": true,
      "osx": {
        "stopOnEntry": false
      }
    }
  ]
}

全球发布配置

您可以定义可在所有工作区中使用的启动配置。要指定全局启动配置,请在您的 中添加一个启动配置对象

发射
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
用户设置。这发射然后该配置将在您的工作区之间共享。例如:

"启动": {
    "版本": "0.2.0",
    "配置": [{
        "类型": "节点",
        "请求": "启动",
        "名称": "启动程序",
        "程序": "${file}"
    }]
}

将输入/输出重定向到/从调试目标

重定向输入/输出是调试器或运行时特定的,因此 VS Code 没有适用于所有调试器的内置解决方案。

以下是两种您可以考虑的方法:

  • 在终端或命令提示符中手动启动(“调试目标”)程序并根据需要重定向输入/输出。确保向调试目标传递适当的命令行选项,以便调试器可以附加到它。创建并运行一个“附加”调试配置,以附加到调试目标。

  • 如果你使用的调试器扩展可以在 VS Code 的集成终端(或外部终端)中运行调试目标,你可以尝试传递 shell 重定向语法(例如,"{" 或 "}")作为参数。

    这是一个例子launch.json配置:

    {
      "name": "从stdin读取文件的程序启动",
      "type": "node",
      "请求": "启动",
      "程序": "program.js",
      "控制台": "集成终端",
      "参数": ["<", "in.txt"]
    }
    

    这种方法要求输入:<语法通过调试器扩展传递,并且最终在集成终端中未被修改。

复合启动配置

另一种启动多个调试会话的方法是使用复合启动配置。您可以在化合物物业在launch.json文件。

使用配置将属性列出两个或多个应并行启动的启动配置的名称。

可选地,指定一个预启动任务在单独的调试会话启动之前运行的任务。布尔标志停止所有控制是否手动终止一个会话会停止所有的复合会话。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Server",
      "program": "${workspaceFolder}/server.js"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Client",
      "program": "${workspaceFolder}/client.js"
    }
  ],
  "化合物": [
    {
      "名称": "服务器/客户端",
      "配置": ["服务器", "客户端"],
      "预启动任务": "${默认构建任务}",
      "停止所有": true
    }
  ]
}

复合启动配置也会显示在启动配置下拉菜单中。

在调试服务器程序时自动打开一个URI

开发网络程序通常需要在网页浏览器中打开一个特定的URL,以便在调试器中击中服务器代码。VS Code 有一个内置功能 "serverReadyAction" 来自动化这个任务。

这是一个简单的Node.js Express应用程序示例:

var express = require('express');
var app = express();

应用程序.获取('/', 函数(请求, 响应) {
  响应.发送('Hello World!');
});

应用程序.监听(3000, 函数() {
  控制台.日志('示例应用程序正在3000端口监听!');
});

此应用程序首先为"/" URL 安装一个"Hello World"处理程序,然后开始在3000端口监听HTTP连接。端口在调试控制台中宣布,通常情况下,开发者现在会输入http://localhost:3000进入他们的浏览器应用程序。

服务器就绪操作功能使得可以添加一个结构化属性服务器就绪动作选择任何启动配置并选择要执行的“操作”:

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",

  "服务器就绪操作": {
    "模式": "正在监听端口 ([0-9]+)",
    "uri格式": "http://localhost:%s",
    "操作": "在外部打开"
  }
}

这里图案属性描述了用于匹配程序输出字符串的正则表达式,该字符串宣布端口。端口号的模式被放在括号中,以便它可以作为正则表达式捕获组使用。在这个示例中,我们仅提取端口号,但也可以提取完整的URI。

uri格式属性描述了如何将端口号转换为URI。首先输入:%s被匹配模式的首个捕获组替换。

然后在 VS Code 外部(“外部”)使用为该 URI 方案配置的标准应用程序打开该 URI。

通过 Microsoft Edge 或 Chrome 触发调试

或者,该行动可以设置为使用Edge调试使用Chrome调试在这种模式下,一个网页根目录可以添加的属性会传递给 Chrome 或 Microsoft Edge 调试会话。

为了简化一些事情,大多数属性都是可选的,我们使用以下默认值:

  • 模式"正在监听.* (https?://\\S+|[0-9]+)"这与通常使用的消息“正在监听端口3000”或“现在正在监听:https://localhost:5001”相匹配。
  • uri格式"http://localhost:%s"
  • 网页根目录"${workspaceFolder}"

触发任意启动配置

在某些情况下,您可能需要为浏览器调试会话配置更多选项,或者使用完全不同的调试器。您可以通过设置行动开始调试与一个名字属性设置为启动时要启动的启动配置的名称图案匹配。

指定的启动配置必须与包含的文件或文件夹位于同一位置。服务器就绪动作输入:.

这里展示了服务器就绪操作 功能的运行:

下一步

  • 任务 - 描述如何使用Gulp、Grunt和Jake运行任务,以及如何显示错误和警告。
  • 变量参考 - 描述 VS Code 中可用的变量。

常见问题

我看不到运行和调试视图下拉菜单中的任何启动配置。出什么问题了?

最常见的问题是您没有设置launch.json或者该文件存在语法错误。或者,您可能需要打开一个文件夹,因为不支持文件夹的调试。