Node.js 应用怎么调试?
Node.js 调试四种方法:console.log、内置 inspector(node --inspect + Chrome DevTools)、debugger 语句断点、VS Code 调试配置。本文给出每种方法的操作步骤与适用场景。
日常最快: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 栈支持。