vscode无法通过快捷键直接抓内存快照或定位泄漏,必须手动执行node --inspect启动、vscode attach连接,并在chrome://inspect中使用memory面板对比至少三次堆快照,重点分析retained size和detached对象。

VSCode 本身没有快捷键能直接抓内存快照或定位泄漏——所有有效操作都得绕过快捷键,靠手动命令+Chrome DevTools 配合完成。
Ctrl+Shift+P 打开的 Developer: Open Process Explorer 不是你代码的监控入口
这个面板只显示 VSCode 自身进程:主进程、renderer、extensionHost。你运行的 node app.js 是独立子进程,完全不会出现在这里。误以为 extensionHost 内存高 = 你的服务泄漏,是常见错觉。真正要盯的是终端里跑起来的 node 进程 PID,不是这个视图里的任何一行。
Developer: Toggle Developer Tools 不能替代 Chrome DevTools Memory 面板
VSCode 内置 DevTools 的 Memory 标签功能残缺:不支持堆快照对比、Retained Size 排序、Detached 对象展开分析。它连 HeapProfiler.takeHeapSnapshot 协议调用都不响应。必须打开 chrome://inspect → Configure → 添加 localhost:9229 → 刷新后点 inspect,才能进完整 Memory 面板。否则拍出来的快照没法比,也看不到引用链里那个藏在 handlers 下面的 Buffer。
launch.json 里配 attach 模式才是关键,不是快捷键能触发的
VSCode 调试器介入太晚,launch.json 里用 type: "node" 直接 run,根本捕不到 require 阶段创建的闭包和模块缓存泄漏。必须:
- 终端手动执行
node --inspect=9229 app.js(端口可换,但要一致) -
launch.json中type设为"attach",port填相同值 -
localRoot和remoteRoot都设为"${workspaceFolder}",否则快照里变量名全变成$$0、$$1 - 开发环境加
--max-old-space-size=1024,让 OOM 快点来,别等半小时
这些配置没快捷键,全靠手写 JSON 和终端输入。
别信“一键生成快照”的插件或 UI 按钮
VSCode 的 js-debug 调试器不暴露完整 HeapProfiler 权限,Debug Console 里敲 v8.writeHeapSnapshot() 会报 Not supported。heapdump 也得代码里显式调用,且路径要提前建好目录,不然回调里 err 是 ENOENT。信号触发(比如 SIGUSR2)在 VSCode 调试会话里根本不可用——PID 不暴露,子进程组隔离了。
真正卡点不在快捷键,在于你有没有亲手敲下 node --inspect、有没有在 chrome://inspect 里点三次 Capture heap snapshot、有没有右键 Compare to previous snapshot 后盯着 Retained Size 排序看 Closure 和 EventEmitter。这些动作没法缩成 Ctrl+Alt+X,漏掉任意一环,泄漏就还在那儿,只是你看不见。











