VSCode调试Node.js不能直接用pm2或forever,因其不支持inspector协议;应通过--inspect-brk配合attach模式或NODE_OPTIONS环境变量实现可靠调试。

launch.json 里不能直接写 pm2 或 forever
VSCode 的 Node.js 调试器(vscode-js-debug)只支持原生 node 进程或兼容 inspector 协议的进程。像 pm2 start app.js 这类命令启动的是守护进程管理器,它 fork 出子进程、重定向 I/O、甚至可能用 cluster 模式——调试器根本连不到真正跑业务代码的那个子进程。
常见错误现象:Cannot connect to runtime process、断点灰掉、调试控制台空转无输出。
- 别在
launch.json的runtimeExecutable里填"pm2"或"forever"—— 它们不是 node 替代品,不接受--inspect参数 - 也不要用
program指向ecosystem.config.js或forever.json—— 这些是配置文件,不是可执行 JS 入口 - 真正要调试的,永远是你的业务入口文件(比如
src/index.js),而不是进程管理器本身
用 --inspect-brk + attach 模式连接已启动的守护进程
如果你必须用 pm2 启动(比如生产模拟、多实例、日志轮转等场景),唯一可靠的方式是让 pm2 显式暴露 inspector 端口,并让 VSCode 主动 attach 过去。
实操步骤:
- 先确保
pm2是全局安装的:npm install -g pm2,且版本 ≥ 5.3(支持--inspect) - 启动时加调试参数:
pm2 start src/index.js --name myapp --inspect=9229 --no-daemon
注意:--no-daemon很关键,否则 pm2 会后台化,VSCode 无法稳定 attach - 在
.vscode/launch.json中添加一个attach配置:{ "type": "node", "request": "attach", "name": "Attach to PM2", "port": 9229, "restart": true, "address": "localhost", "protocol": "inspector" }
Rydberg Agent Node下载使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 启动后,VSCode 会在端口就绪时自动连接;
restart: true能在 pm2 重启子进程后自动重连(前提是端口不变)
本地开发更推荐:用 nodemon + --inspect-brk 替代守护进程
绝大多数“自启动”需求其实只是想保存即重启 + 断点不丢,根本不需要 pm2 那套进程管理能力。这时 nodemon 更轻量、更可控、和 VSCode 调试集成更稳。
package.json 示例:
"scripts": {
"dev": "nodemon --inspect-brk=9229 ./src/index.js"
}
对应 launch.json 配置(attach 模式):
{
"type": "node",
"request": "attach",
"name": "Attach to nodemon",
"port": 9229,
"restart": true
}
-
--inspect-brk确保进程一启动就暂停,给你时间设断点;没加-brk时,Express 初始化、DB 连接等逻辑可能瞬间跑完 - 不要用
launch模式配runtimeExecutable: "nodemon"—— Windows 下常因.cmd扩展名失败,macOS/Linux 可能路径解析错乱 -
restart: true只在成功 attach 后生效;所以务必先npm run dev,等终端输出Debugger listening on ws://127.0.0.1:9229/再点 VSCode 的 ▶️
NODE_OPTIONS 环境变量是最透明的“自动附加”方案
如果连 nodemon 都不想显式调用,又希望任何 node 命令启动都可被 VSCode 自动发现,那就靠环境变量注入:
- macOS/Linux:在终端运行
export NODE_OPTIONS='--inspect=0.0.0.0:9229',再执行node src/index.js - Windows(CMD):
set NODE_OPTIONS=--inspect=0.0.0.0:9229,然后node src/index.js - VSCode 会监听
9229端口,一旦检测到符合 inspector 协议的进程,自动弹出 “Auto Attach” 提示 - 这个方式不依赖 launch.json,也不需要提前配 attach;但要注意:同一端口只能有一个进程,多项目同时 debug 会冲突
真正容易被忽略的是端口绑定地址:--inspect=9229 默认只监听 127.0.0.1,而 --inspect=0.0.0.0:9229 才能让 VSCode 在不同网络栈(如 WSL、Docker)下也能连上——但仅限可信开发环境,切勿在生产用 0.0.0.0。

















