CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 运行时进阶/课时/调试 Node
RawBlame
课时目录12 节

Node.js 运行时进阶

  1. 01运行时进阶概览
  2. 02定时器与 nextTick
  3. 03回调与错误栈
  4. 04子进程
  5. 05Worker Threads
  6. 06Cluster 与多进程
  7. 07垃圾回收
  8. 08调试 Node
  9. 09APM 与生产监控
  10. 10CLI 工具链
  11. 11global 与内置模块
  12. 12综合练习

调试 Node

node --inspect、using-debugger。

35 分钟

调试 Node

nodejs-essentials 用 console.log 起步;nva-errors 讲错误分类。本课用 Inspector 协议、node --inspect、断点与 CPU/Heap 分析——定位 nrt-timers 阻塞与 nrt-gc 泄漏。

学习目标

  • 启动 inspect 并在 Chrome DevTools 或 VS Code 中下断点
  • 使用 debugger 语句与 conditional breakpoint
  • 对 Worker 与 async 链做基本步进调试

启动 Inspector

node --inspect app.js          # 默认 9229,首行可能断住
node --inspect-brk app.js      # 第一行暂停,适合来不及下断点的脚本
node --inspect=0.0.0.0:9229 app.js  # 远程调试(注意安全组/防火墙)

终端会打印 devtools:// 链接;Chrome 打开 chrome://inspect → Configure → 添加 localhost:9229。

安全:生产环境不要对公网暴露 9229;用 SSH 隧道或仅本地 bind。

VS Code launch.json 片段

{
  "type": "node",
  "request": "launch",
  "name": "Debug App",
  "program": "${workspaceFolder}/app.js",
  "skipFiles": ["<node_internals>/**"]
}

skipFiles 跳过 Node 内部帧,async 栈更易读。测试调试可对 node-test 用 "runtimeArgs": ["--inspect-brk"]。

debugger 与日志断点

function compute(n) {
  debugger; // 运行到此处暂停(需 inspect 附着)
  return n * 2;
}

DevTools Logpoint 可在不改代码的情况下 console.log 表达式——适合临时看变量。

调试 async 与 Promise

  • Async stack traces:Settings 勾选「Async stack traces」。
  • 步进时区分 Step over(跳过 async 内部)与 Step into(进入 then/await)。
  • await 挂起时 call stack 会显示 microtask——结合 nrt-callbacks 理解。

CPU Profiler 与 Heap

工具用途
Performance / CPU profile找同步热点、Event Loop 长任务
Memory → Heap snapshot
泄漏、Retained size
Memory → Allocation sampling分配热点

nrt-worker 可 分别 inspect 主线程与 worker(worker 启动时带 --inspect-port 递增)。

常用命令行标志

node --trace-warnings app.js
node --trace-uncaught app.js
NODE_OPTIONS='--enable-source-maps' node app.js   # TS 源码映射

练习

  • 对含 setTimeout 的脚本用 --inspect-brk,单步观察 call stack
  • 在 DevTools 拍两次 heap snapshot,对比增量(哪怕空项目练手)
  • 为 nrt-practice 脚本写好 VS Code debug 配置

小结

inspect 附着、断点步进、CPU/Heap 三板斧。 下一课 APM——把调试能力延伸到生产可观测。

加载本节练习…
← 上一课垃圾回收下一课 →APM 与生产监控