端口冲突源于默认端口被多工具抢占,应改用9300–9400冷门区间并统一配置;子进程调试需开启autoattachchildprocesses且传入execargv;远程/容器环境须正确设置监听地址与端口转发;进程退出需优雅关闭避免time_wait残留。

端口冲突不是运气问题,是配置没绕开默认区间
VSCode里多个Node调试实例一启动就报 EADDRINUSE,根本原因不是“刚好撞了”,而是你还在用 9229、3000 这类默认端口。Chrome DevTools、WebStorm、甚至另一个 VSCode 窗口都在抢这些号。别改完 launch.json 就以为完事——只改 "port": 9229 是治标,得换冷门区间。
- 调试端口建议落在
9300–9400区间,比如"port": 9321 - 如果配了
nodemon,确保runtimeArgs里的--inspect-brk=9321和port值严格一致 -
address字段别设成"0.0.0.0"——IPv4/IPv6 双栈监听可能引发隐式冲突,固定写"localhost"或"127.0.0.1" - Live Server 插件完全不读
launch.json,它的端口要单独在设置里搜liveServer.settings.port改
子进程调试失败?大概率漏了 execArgv 或 autoAttachChildProcesses
开了两个终端分别跑 node main.js 和 node worker.js,断点互不生效,是因为调试器根本没把它们当“子进程”看待。真正让 VSCode 联动调试的,只有 autoAttachChildProcesses: true 这个开关,配合正确的启动参数。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 必须在
launch.json中显式开启:"autoAttachChildProcesses": true -
fork()子进程必须传execArgv,否则它压根不暴露调试端口:fork('./worker.js', [], { execArgv: ['--inspect-brk=9321'] }) -
Worker实例同理,不能只写new Worker('./worker.js'),要加{ execArgv: ['--inspect-brk=9321'] } - 端口别硬写死——多个 Worker 共用同一
9321,调试器只会连上第一个;要么删掉=9321让 Node 自动分配,要么动态传入唯一端口
远程或容器环境里,端口转发和本地监听别混为一谈
在 Dev Container 或 Remote-SSH 下跑 Node,server.listen(3000) 成功不代表你能立刻访问。VSCode 的端口转发是另一层代理机制,不是自动打通的魔法。
- 服务启动时监听地址必须是
'0.0.0.0'(不是'localhost'),否则容器内网络无法被转发层捕获 - 转发靠
devcontainer.json的"forwardPorts": [3000]或命令面板里手动执行Forward a Port - 转发后访问的是
http://localhost:3000,但这个3000是本地端口,和容器里那个3000逻辑隔离——两者可不同,比如容器用3000,本地映射到3001 - Remote-SSH 的内置服务(如某些扩展自带的 HTTP 服务)端口无法配置,只能提前用
remote.SSH.defaultForwardedPorts预留白名单,或杀进程释放
进程退出不清理端口,下次启动照样冲突
每次手动 kill 或 taskkill 只是临时止血。Node 进程被 Ctrl+C 中断后若没主动调用 server.close(),端口会卡在 TIME_WAIT 状态,几秒到几分钟内仍不可复用。
- 入口文件里加优雅关闭逻辑:
process.on('SIGINT', () => { server.close(); process.exit(0); }); - 避免在
package.json的 scripts 里硬编码端口,比如"start": "react-scripts start --port 3000";换成环境变量驱动:"start": "PORT=3001 react-scripts start" - 改完所有配置后,务必手动关掉所有已运行的调试会话、Live Server 实例、终端里的
node进程——旧进程不会自动 reload 新端口
lsof -ni :端口号(macOS/Linux)或 Get-NetTCPConnection -LocalPort 端口号(Windows PowerShell),而不是靠任务管理器猜哪个 node.exe 是你自己的。










