Node.js 应用怎么调试?

Node.js 调试四种方法:console.log、内置 inspector(node --inspect + Chrome DevTools)、debugger 语句断点、VS Code 调试配置。本文给出每种方法的操作步骤与适用场景。

最佳实践
Node.js 事件循环与异步任务示意

日常最快:node --inspect + Chrome DevTools 断点调试;临时排查用 console.log;IDE 党用 VS Code 一键配置。

方法一:console.log(最简单)

在关键位置打印变量和流程标记:

console.log('变量值:', someVariable);

优点是零成本;缺点是要改代码、容易忘了删。升级版:用 console.table() 打印数组对象、console.time()/timeEnd() 测耗时、debug 包做可开关的分级日志。

方法二:内置 inspector + Chrome DevTools

node --inspect your-script.js

然后 Chrome 打开 chrome://inspect,点击你的 Node 进程即可:断点、单步、监视变量、调用栈一应俱全。

想在第一行就停住(调启动逻辑时用):

node --inspect-brk your-script.js

方法三:debugger 语句

代码里写 debugger;,配合 --inspect 运行时执行到这里自动暂停:

function calculate(a, b) {
  debugger;  // 运行时在这停住
  return a + b;
}

注意:只在 inspector 连接时生效,普通运行会被忽略,但提交前仍建议删除。

方法四:VS Code 调试

launch.json 加一条配置:

{
  "type": "node",
  "request": "launch",
  "name": "调试当前文件",
  "program": "${file}"
}

点行号左侧打断点,F5 启动。VS Code 会自动附加 inspector,体验最好。

线上问题排查

线上不能断点调试(会停住所有请求),改用:

  • 结构化日志定位现场;
  • --report-on-fatalerror 生成崩溃报告;
  • APM 工具做调用链追踪。使用观测云时,按链路日志关联说明在日志中写入 trace_id,从慢请求查同一次调用的错误记录;未采集的业务步骤需要另行埋点。

常见问题(FAQ)

Q:--inspect 和 --inspect-brk 区别?
前者启动后立即运行、等你随时 attach;后者启动即暂停在第一行,等调试器连上再继续。调启动逻辑用后者。

Q:生产环境能开 --inspect 吗?
不要。inspector 端口暴露等于远程代码执行入口。本地调通后再考虑是否需要在隔离环境短期开启,且务必防火墙限制访问。

Q:调试异步代码断点乱跳?
异步回调的调用栈是断开的。DevTools 勾选 "Async stack traces",或用 VS Code 的 async 栈支持。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台