VS Code附加调试Node.js进程需目标程序以--inspect启动并正确配置launch.json。1. 启动时必须加--inspect或--inspect-brk参数暴露调试端口;2. launch.json中设"type": "node"、"request": "attach"、"port"与启动端口一致,禁用"program"字段;3. 断点灰色多因路径映射不匹配,需检查sourceMap、outFiles及工作区路径一致性。

能附加,但前提是 Node.js 进程自己得“开着调试门”——不是 VSCode 想连就能连。
Node.js 进程必须带 --inspect 启动
VSCode 附加调试器本质是 HTTP + WebSocket 协议通信,目标进程得主动暴露调试端口。没加 --inspect(或 --inspect-brk),VSCode 就连不上,常见报错:Could not connect to debug target 或列表里压根看不到进程。
- 启动命令必须显式包含调试标志:例如
node --inspect=9229 app.js(端口可自定义,9229 是默认) -
--inspect-brk会让进程在第一行暂停,适合抢断点;--inspect则直接运行,靠后续断点触发暂停 - 若用
npm start启动,需改package.json的 script:比如"dev": "node --inspect-brk index.js" - Docker 场景下,确保容器内端口映射正确(如
-p 9229:9229),且--inspect绑定的是0.0.0.0:9229而非默认的127.0.0.1
launch.json 的 attach 配置不能套用 launch 模板
很多人复制一个 request: "launch" 的配置,只把 request 改成 "attach",其他字段照搬——这大概率失败。Node.js 的 attach 模式只认几个关键字段,多的反而干扰。
- 必须设
"type": "node"和"request": "attach" - 必须指定
"port": 9229(值要和启动时--inspect=9229的端口一致) -
"address"一般不用填,默认"localhost";若进程在 Docker 容器中,填"host.docker.internal"(macOS/Windows)或宿主机 IP(Linux) - 别加
"program"字段——attach 模式不走本地文件启动,加了会被忽略或报错 - 想自动重连崩溃重启的进程?加上
"restart": true
断点灰色、不命中?八成是路径映射没对上
附加成功、控制台有日志、但断点一直是空心圆(灰色),说明调试器找到了进程,却找不到你代码对应的源文件位置。典型于 Docker 挂载、构建产物路径、TS 编译输出等场景。
- 检查你在 VSCode 里打开的工作区路径,是否和进程实际加载的模块路径一致?比如你开的是
/Users/me/project,但容器里跑的是/app,就得配"sourceMaps": true并加"outFiles"或"webRoot" - TypeScript 项目务必确认
tsconfig.json含"sourceMap": true,且生成的.js.map文件和.js在同一目录 - Webpack/Babel 用户,
devtool别用eval类型,选"source-map"或"inline-source-map" - 如果用了
nodemon或 PM2,它们可能启动子进程——VSCode 默认不自动附加子进程,需手动启用"autoAttachChildProcesses": true(仅限 launch 模式)或换用node --inspect直接启动主进程
最易被忽略的其实是环境隔离:VSCode 终端里 node -v 正常,不代表它调用的 node 和你启动服务的 node 是同一个二进制。尤其 macOS 上通过 Homebrew 安装、又用 zsh 启动 VSCode 时,PATH 可能不继承。建议在 VSCode 集成终端里直接运行 which node 和你的启动命令,比对路径是否一致。


















