vscode多入口调试必须用compounds:先在configurations数组中定义多个唯一name、request为launch、显式指定port且console为integratedterminal的配置,再通过compounds组合启动,否则仅执行第一个配置。

VSCode多入口调试必须用 compounds,不是写多个 configuration
直接在 configurations 数组里塞两个 "type": "node" 配置是无效的——VSCode 只会执行第一个。真正能“同时启动多个服务并调试”的唯一方式,是定义多个独立 configuration,再用 compounds 把它们组合起来。
每个 configuration 必须满足:
-
name唯一(如"API Server"、"Worker Service") -
program指向真实存在的入口文件(推荐用${workspaceFolder}/src/xxx.js,别用相对路径) -
"request": "launch"(不是"attach",否则不会自动拉起进程) -
"console": "integratedTerminal"(缺这个,第二个服务大概率卡住不动)
端口冲突是多服务调试失败最常见原因
Node.js 默认调试端口是 9229,但 VSCode 不会自动帮你错开。如果你没显式指定 port,所有 node --inspect 进程都会抢同一个端口,结果就是第二个服务报 Cannot connect to the target,终端里根本看不到 Debugger listening on ws://...。
正确做法:
- 每个
configuration显式加"port": 9230、"port": 9231等不重复值 - Windows 用户记得手动在任务管理器杀干净残留
node.exe - macOS/Linux 执行
pkill -f "node --inspect"比只靠 VSCode 停止更彻底 - 如果用了
nodemon,得配"restart": true,否则第一次崩溃后就退出,断点再也不会触发
Python 多进程断点进不去?三个条件缺一不可
VSCode 调试 Python 子进程不是默认开启的,必须同时满足:
- 启动方法必须是
spawn(Windows 强制,macOS/Linux 需显式调用mp.set_start_method('spawn')) - 子进程函数(如
worker())必须定义在模块顶层,不能嵌套在if __name__ == '__main__':块里、类中或闭包内 -
launch.json中启用"subProcess": true,且配套设置"console": "integratedTerminal"和"justMyCode": false
漏掉任意一个,就会出现“日志照常输出,但断点完全不命中的”假象——其实不是断点失效,是 VSCode 根本没 attach 到子进程上。
CMake 多目标调试:build 目录和 program 路径必须严格对应
VSCode 本身不支持“一键构建并调试多个 CMake target”,但你可以通过 CMakePresets.json 定义多个构建配置(比如 clang-x86_64-debug、msvc-arm64-release),再让 launch.json 的 program 指向对应 build 目录下的可执行文件。
关键细节:
-
CMakePresets.json必须放在项目根目录,文件名大小写敏感 - 每个
configurePreset的binaryDir必须唯一,共用目录会导致缓存污染 -
launch.json中的program路径要精确匹配 build 输出,例如"${workspaceFolder}/build/msvc-x64-debug/myapp.exe" - 确保 CMake 构建类型为
Debug(即CMAKE_BUILD_TYPE=Debug),否则断点显示为空心圆,变量值显示为<not available></not>
多目标调试的本质不是“同时跑”,而是“按需快速切换并精准 attach”。路径错一位、build type 错一种、preset name 写错大小写,都会让调试器找不到符号或根本启不动。











