登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  软件教程

VS Code launch compound 怎样同时启动多个调试配置

来源:17golang原创

时间:2026-10-20 23:57:14 319浏览 收藏

如果一个项目需要同时调试服务端和客户端,反复在 VS Code 里按两次启动既慢又容易漏掉配置。launch.json 的 compounds 可以把两个独立的调试配置组合成一个入口,选择一次就同时启动多个会话。

官方地址:https://code.visualstudio.com/docs/debugtest/debugging-configuration

先记住这几个关系
  • configurations 保存真正可启动的调试配置,compounds 只负责按名称引用它们。
  • compound 中列出的配置默认会并行启动,不是按数组顺序串行执行。
  • preLaunchTask 可以在组合启动前运行任务,stopAll 为 true 时手动停止一个会话会联动停止组合中的会话。

先从 Run and Debug 打开 launch.json

先用 VS Code 打开项目文件夹,再从左侧 Activity Bar 进入 Run and Debug。如果项目还没有调试配置,选择创建 launch.json,再选择目标语言或运行时。项目级配置通常保存为项目根目录下的 .vscode/launch.json,这样配置可以跟着项目一起维护。

VS Code 官方文档把这个文件分成两层:configurations 是可单独选择的启动项,compounds 是多个启动项的组合。先把单个配置写正确,再组合它们,排错会比直接堆一个 compound 清楚。

原创 VS Code 调试配置界面说明图,展示 configurations 中的 Server 和 Client 以及 compounds 的引用关系
图1:launch.json 中独立调试配置与 compound 引用关系的界面说明图,不是真实软件截图。

先定义两个可以单独启动的配置

下面用 Node.js 的服务端和客户端作为示例。实际项目中的 type、program 和其他字段,要按已安装的调试扩展支持的 schema 调整;示例重点是配置名称和组合关系。

{
  "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"
    }
  ]
}

这里的 name 是后面引用配置的关键。Server 和 Client 必须在当前工作区内保持清晰、唯一;如果只是想确认单个入口是否可用,可以先在 Run and Debug 的配置下拉框中分别启动它们。

用 compounds 把两个入口组合起来

确认两个配置都能独立使用后,在同一个文件中增加 compounds 数组。它与 configurations 同级,组合项中的 configurations 数组填写的是前面两个配置的 name,不是文件名,也不是数组下标。

{
  "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"
    }
  ],
  "compounds": [
    {
      "name": "Server and Client",
      "configurations": ["Server", "Client"],
      "stopAll": true
    }
  ]
}

保存后,Server and Client 会出现在调试配置下拉框里。启动这个组合项时,VS Code 会同时启动被引用的两个调试配置;它不是把两个配置复制一份,也不会改变它们单独启动时的行为。

需要准备动作时再加 preLaunchTask

有些项目需要先编译、生成资源或启动一个准备任务。此时可以在 compound 上设置 preLaunchTask,让它在组合中的调试会话启动前执行。任务名称必须对应工作区 .vscode/tasks.json 中的 label,也可以使用 ${defaultBuildTask} 引用默认构建任务。

{
  "compounds": [
    {
      "name": "Server and Client",
      "configurations": ["Server", "Client"],
      "preLaunchTask": "build-debug-assets",
      "stopAll": true
    }
  ]
}

这里的 JSON 只是说明 compound 字段,实际使用时要把它合并进前面的完整 launch.json,不要在同一个文件里重复写两个顶层 compounds。如果准备任务失败,先处理任务本身,不要把问题误判成 compound 没有启动。

从下拉菜单启动并观察两个会话

  1. 打开 Run and Debug 视图,在顶部配置下拉框选择 Server and Client。
  2. 点击绿色启动按钮,或按 F5 开始调试。
  3. 查看调试区域的 CALL STACK,确认服务端和客户端分别作为活动会话出现。
  4. 需要切换查看对象时,在 Debug toolbar 中选择当前活动会话;断点、变量和调试控制会作用于当前选中的会话。
原创 VS Code 运行与调试界面说明图,展示 Server and Client 组合项和两个活动调试会话
图2:Run and Debug 中组合调试会话的界面状态说明图,不是真实软件截图。

如果设置了 stopAll: true,手动停止其中一个会话时,组合里的其他会话也会一起停止。它适合客户端和服务端必须成对运行的项目;如果两个会话需要各自独立保留,可以去掉该属性或改为 false。

为什么看不到 compound 或启动结果不对

现象优先检查处理方向
下拉框没有 Server and Clientcompounds 是否与 configurations 同级,JSON 是否保存成功确认文件位于当前工作区的 .vscode/launch.json
组合项出现但启动失败被引用的 name 是否完全一致,type 对应的调试扩展是否启用先单独启动 Server 和 Client,再回到组合项
以为会按顺序启动compound 的启动语义它默认并行启动;需要等待服务就绪时,应使用具体调试器支持的任务或启动机制
停止一个后另一个仍在运行stopAll 的值需要联动停止时,把它设置为 true

最后用这份清单确认配置

  • 项目已经打开为文件夹或工作区,配置文件在当前项目的 .vscode/launch.json。
  • configurations 中的每个 name 都能单独启动,且没有拼写差异。
  • compounds.configurations 引用的是配置名称,而不是文件路径。
  • 需要准备动作时,preLaunchTask 对应的任务标签确实存在。
  • 需要联动结束时使用 stopAll: true,并接受多个会话同时停止的结果。

相关问题

compound 能不能只启动两个配置中的一个?

不能把 compound 当成可选过滤器。需要只启动一个时,直接从配置下拉框选择原始配置;需要不同组合时,可以定义另一个 compound。

compound 是串行启动还是并行启动?

官方配置语义是同时启动被列出的配置。若一个服务必须先就绪,再启动另一个服务,要把等待逻辑放进任务或具体调试器支持的启动配置中。

多个配置的 name 可以重复吗?

不要重复。compound 通过名称查找配置,名称不清晰或不唯一会让引用和下拉菜单都难以判断。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>