VSCode本身不采集也不显示你代码的运行时性能指标,只负责将代码交给解释器或编译器;真实CPU、内存、执行时间数据须由语言运行时(如Node.js的--inspect+Chrome DevTools、Python的cProfile+snakeviz)或系统工具(如ps、top、psutil)生成,VSCode仅作为配置入口与结果展示管道。

VSCode 本身不采集也不显示你代码的运行时性能指标——它只负责把代码交给解释器或编译器,真正的 CPU、内存、执行时间数据,得由语言运行时或系统工具来产生。想看到真实数字,必须让 VSCode 帮你调用对的工具,并把结果接回来。
Node.js 用 --inspect + Chrome DevTools 抓 CPU 和内存快照
这是最直接、最贴近用户实际体验的路径。VSCode 的 JavaScript Debugger(预装)通过 V8 Inspector 协议连接 Node 进程,所有性能数据都来自 Chrome DevTools 后端。
- 启动时必须加
--inspect或--inspect=9229(避免端口冲突),launch.json 中设"type": "pwa-node"且"port": 9229 - 调试启动后,按
Ctrl+Shift+P→ 输入Developer: Open Process Explorer→ 找到对应进程,点右侧Profile图标开始录制 CPU Profile;再点Take Heap Snapshot拿内存快照 - 生成的
heap-*.heapsnapshot文件不能在 VSCode 里直接分析,得拖进 Chrome 的chrome://devtools→ Memory 面板打开;CPU Profile 也建议导出后用 Chrome Performance 面板看火焰图 - 常见坑:
console.time()只测 JS 执行时间,不包括 GC、I/O 等系统开销;process.memoryUsage().heapUsed是 V8 堆内存,但external内存(如 ArrayBuffer)不计入,容易误判泄漏
Python 用 cProfile + snakeviz 定位热点函数
VSCode Python 插件里的“Run cProfile”只是封装了命令行调用,真正有用的是原始 .prof 文件——表格视图丢掉了调用关系和上下文,必须可视化。
- 终端运行
python -m cProfile -o profile.out script.py,或在代码里写cProfile.run('main()', 'profile.out') - 接着运行
snakeviz profile.out,会自动打开浏览器交互式火焰图,能下钻到每一层函数、看清 self vs. cumtime 差异 - 别信插件内置的“性能分析”按钮:它默认只显示 top-level 函数,看不出是
requests.get慢还是你循环里反复调用它慢 - 内存分析另走一路:
pip install memory-profiler,加@profile装饰器,跑python -m memory_profiler script.py查逐行内存增长,比外部轮询准得多
通用方案:终端里用系统命令盯住真实进程 PID
VSCode 的集成终端就是 shell,所有系统级监控命令都有效。关键不是“怎么在 UI 里看”,而是“怎么精准绑定到你的脚本进程”。
- Linux/macOS:
python script.py & echo $! > /tmp/pid; watch -n1 'ps -p $(cat /tmp/pid) -o pid,ppid,%cpu,%mem,vsz,rss,comm'—— 启动后立刻记下 PID,持续采样 - Windows PowerShell:
$p = Start-Process python -ArgumentList "script.py" -PassThru; while($true) { Get-Process -Id $p.Id | Select-Object CPU, PM, WS; Start-Sleep -Seconds 1 } - 跨平台更稳的做法:在代码里用
psutil(Python)或process.memoryUsage()(Node.js)主动上报,比外部轮询延迟低、精度高 - 注意:
Resource Monitor这类扩展显示的 CPU% 和内存 MB,其实是整个code进程组的 RSS,跟你python script.py的子进程完全无关
真正卡住人的地方,往往不是找不到按钮,而是混淆了数据源头:VSCode 可以高亮 console.time(),但不会解析 chrome://tracing 的 JSON;它能格式化 pyproject.toml,但不决定 mypy 的类型检查路径。性能数字从哪来,就得回哪去盯——编辑器只是管道,不是产源。











