vscode中node调试失败本质是防火墙拦截端口通信:入站规则需放行debugpy(5678)、node --inspect(9229)等调试端口,出站规则需放行code.exe及node.exe以支持插件http请求,且launch.json中address必须与node实际监听地址严格一致。

VSCode 中 Node 环境与 Windows 防火墙的冲突,本质不是 Node 本身被拦,而是 Node 启动的服务(如 debugpy、node --inspect、live-server、Ollama 客户端请求)在端口通信或出站连接环节被系统拦截——90% 的 connection refused、ETIMEDOUT、TLS handshake timeout 都卡在这一步。
Node 调试端口被防火墙入站规则拦截
当你用 VSCode attach 到 node --inspect=9229 或 debugpy(默认 5678),Node 进程会在本地监听该端口;但 Windows 防火墙默认拒绝所有入站连接,哪怕目标是 127.0.0.1。VSCode 尝试连过去时,请求根本到不了 Node 进程。
- 打开「高级安全 Windows Defender 防火墙」→「入站规则」→「新建规则」→ 选「端口」→ TCP → 填入你实际用的端口(如
9229或5678) - 务必勾选「域」「专用」「公用」三项网络类型——缺一不可,否则换 Wi-Fi 后规则失效
- 命名建议带上下文,如
vscode-node-inspect-9229,避免日后混淆 - 不要只放行
Code.exe:入站流量由 Node 进程监听端口触发,防火墙按端口判,不看谁发起监听 - WSL2 场景下该规则必须存在:WSL2 的
localhost映射在 Windows 看仍是外部入站请求
CodeGeex/Ollama 类插件无法访问本地服务
这类插件(如调用 http://localhost:11434 的 Ollama API)失败,常因防火墙阻止了插件宿主进程的【出站】连接,而非入站。VSCode 主进程(Code.exe)或其子进程(如 node.exe)发 HTTP 请求时被静默丢包。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 管理员权限打开 PowerShell,运行:
Get-NetFirewallApplicationFilter | Where-Object { $_.Program -like "*Code.exe*" } | Get-NetFirewallRule
若无输出或状态为“已禁用”,说明没放行 - 在「出站规则」中新建规则 → 选「程序」→ 浏览定位到:
C:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\Code.exe</username>
(注意路径含空格和用户名,建议复制粘贴,勿手输) - 若仍失败,额外为
node.exe添加同款出站规则——很多插件底层用node子进程发fetch请求 - 仅放行
Code.exe不够:Electron 架构下,插件逻辑常跑在独立node进程里
Node 启动的服务绑定地址写错
address 字段在 launch.json 或服务启动命令中写错,会导致 VSCode 连错目标,或 Node 进程拒绝绑定,现象同样是 connection refused。
- 本地调试(Node 在 Windows 本机跑):
确保"address": "localhost",且 Node 启动时加--inspect=localhost:9229(而非0.0.0.0) - WSL2 调试(Node 在 WSL2 里):
仍用"address": "localhost"——WSL2 默认通过localhost映射端口,只要入站规则开了,Windows 能透传 - 真远程(如树莓派):
必须写目标 IP,如"address": "192.168.1.100";写"localhost"会让 VSCode 去连自己本机 - 验证端口是否真在监听:
在对应环境执行netstat -ano | findstr :9229(Windows)或lsof -i :9229(WSL2/Linux),确认 PID 存在且状态为LISTENING
最易被忽略的是:入站规则和出站规则要分开建,且分别对应不同场景;很多人只配了入站,却卡在插件连不出去,或者只配了出站,却连不进调试端口。另外,launch.json 里的 address 和 Node 实际监听地址必须严格一致,差一个 0.0.0.0 就全盘失效。










