node-report 需显式启用并正确配置才能生成 dump 文件:必须添加 --experimental-report 及相关参数,vscode 调试模式下 launch.json 常失效,应改用终端启动或 attach 模式;需指定 --report-directory 确保路径存在且可写,注意 node 版本 ≥ v14.18.0、平台信号差异(windows 无 sigusr2)及 dump 权限问题。

node-report 在 VSCode 里根本没生成 dump 文件?先确认它是否真在运行
node-report 不是装上就自动 dump 的工具,它只在 Node.js 进程收到特定信号(如 SIGUSR2)或发生严重崩溃(如 FATAL ERROR)时触发。VSCode 内置终端里执行 node app.js,哪怕程序崩了,也大概率不会生成 dump——因为默认没启用 --experimental-report,且进程退出太快来不及写盘。
必须显式启动:
- 在终端中运行
node --experimental-report --report-on-fatalerror --report-on-signal --report-signal=SIGUSR2 app.js - 若用 npm script,改
"start": "node --experimental-report --report-on-fatalerror --report-on-signal --report-signal=SIGUSR2 ./index.js" - Windows 用户注意:
SIGUSR2不可用,只能依赖--report-on-fatalerror或手动发Ctrl+Break(不是 Ctrl+C)触发
VSCode 调试模式(launch.json)下 node-report 失效的常见原因
VSCode 的 Node.js 调试器(type: "node")会接管进程生命周期,绕过原始 Node 启动参数。你在 launch.json 里加 runtimeArgs,但 --experimental-report 很可能被忽略——它需要在进程真正 fork 出来前就注入,而调试器的 launcher 逻辑不保证这点。
可靠做法是绕过调试器封装:
- 删掉
runtimeExecutable字段(除非你明确用 nvm/fnm) - 在
runtimeArgs中只保留--experimental-report及相关选项,不要混用--inspect等调试参数 - 更稳妥:不用 launch.json 启动,改用终端执行带 report 参数的 node 命令,再用
attach模式连接调试器
dump 文件生成路径混乱、找不到?别信默认位置
node-report 默认把 dump 写到当前工作目录,但 VSCode 终端的工作目录不等于项目根目录,也不等于 launch.json 里设的 cwd。尤其当用 code . 从子目录打开时,process.cwd() 可能是某个嵌套文件夹。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
强制指定输出路径:
- 加参数
--report-directory=./.dumps(路径需存在,VSCode 不会自动创建) - 配合
--report-filename=report-${pid}-${isoTime}避免覆盖 - 验证是否生效:在代码里加
console.log('report dir:', process.env.NODE_REPORT_DIR || 'not set'); - Windows 下路径分隔符用正斜杠
/更安全,避免转义问题
生成的 dump 是空的或无法解析?检查 V8 堆快照权限与大小限制
node-report 默认尝试抓 V8 堆快照(heap 字段),但大项目堆超 2GB 时,Node 可能静默跳过该部分,只留 javascript 和 system 段——这会让分析失去关键线索。
必须主动放宽限制:
- 加
--report-uncaught-exception捕获未处理异常场景 - 若目标是 OOM 类崩溃,额外加
--max-old-space-size=4096,否则 V8 可能根本没机会生成完整堆快照 - 确认 Node 版本 ≥ v14.18.0(
--experimental-report稳定支持起点),VSCode 内置 Node 版本可通过Help → About查看,别假设它和系统 node 一致 - dump 文件权限:Linux/macOS 下确保目标目录可写;Windows 下防病毒软件可能拦截写入,临时禁用试试
最易被忽略的一点:VSCode 的 Extension Host 进程、Remote-SSH 远端进程、甚至 TypeScript Server,都各自运行独立 Node 实例。你在主终端看到 dump,不代表它来自你调试的业务进程——务必核对 pid 和 trigger 字段,别对着错的 dump 分析半天。










