compound是vscode唯一支持多调试会话协同启动的机制,必须在launch.json顶层显式配置,引用已定义且name完全匹配的configurations;它不执行代码,仅按序拉起各调试进程,依赖关系需靠prelaunchtask或脚本保障。

launch.json 里 compound 配置必须显式声明
VSCode 不会自动识别多个服务该“一起启动”,compound 是唯一能触发多调试会话协同启动的机制。它不运行任何代码,只负责按顺序拉起多个已定义好的 configuration。
常见错误是只写了多个 configurations,但没加 compounds,结果 F5 只启动第一个;或者 compounds 的 configurations 字段里写错了 name(大小写、空格、拼写都必须完全一致)。
-
compounds必须放在launch.json顶层,和configurations同级 - 每个被引用的
configuration的name值不能重复,且不能含特殊字符(建议用短横线或下划线) - 如果某个服务依赖另一个先就绪(比如前端要等后端 API 启动),
compounds本身不处理等待逻辑,得靠preLaunchTask或外部脚本兜底
各服务调试配置的 type 和端口必须互斥
Node.js、Java、Python、C++ 等不同语言的调试器在 VSCode 中由不同扩展提供,它们对 type 字段的取值非常敏感。填错 type(比如把 node 写成 javascript)会导致“找不到调试适配器”错误;端口冲突则会让第二个服务直接启动失败,报 address already in use。
- Node.js 服务:
type: "node",默认监听9229,如需并行调试多个,必须手动改port字段 - Spring Boot Java:
type: "java",需确保vmArgs包含-agentlib:jdwp=...,且端口不与其它 JVM 进程重叠 - 前端浏览器调试:
type: "pwa-chrome"或"pwa-msedge",url必须指向已启动的服务地址(如http://localhost:3000),不是本地 HTML 文件路径
.code-workspace 要先建好,再配调试
多项目联合调试的前提是 VSCode 知道“这些项目属于同一个上下文”。如果只是分别打开两个文件夹窗口,launch.json 即使写对了,也只会作用于当前活动文件夹,另一个项目里的断点不会生效,compounds 更无法跨窗口拉起进程。
- 必须通过
文件 > 将文件夹添加到工作区把前后端、微服务模块等全部加入,再文件 > 将工作区另存为生成.code-workspace文件 -
launch.json应放在工作区根目录的.vscode/下,而不是某个子项目里 - 工作区设置(如
settings.json)中启用"debug.allowBreakpointsEverywhere": true,否则跨项目断点可能被忽略
环境变量和 classpath 容易漏配,尤其 Java 多模块
前端服务通常靠 env 字段注入 NODE_ENV 或 API_BASE_URL,而后端(特别是 Maven 多模块)失败往往卡在类加载阶段:Could not find or load main class 或 NoClassDefFoundError。这不是代码问题,是 launch.json 没告诉 JVM 该去哪找主类、哪些模块要打进 classpath。
- Java 启动必须明确指定
mainClass(全限定名,如com.example.gateway.GatewayApplication),不能只写类名 -
projectName字段要填对——它对应 Maven 模块名,不是文件夹名,VSCode 依赖它解析依赖树 - 若用 Spring Boot,
args中可加--spring.profiles.active=dev,但env里别重复设SPRING_PROFILES_ACTIVE,避免冲突











