
Node系列 · Express断点调试调试 Node 代码不是只能靠console.log。Node 自带 Inspector 协议配合 Chrome DevTools 或 VSCode 就能打断点、单步执行、查看变量——效率提升一个数量级。一、node --inspect启动调试模式node--inspectapp.jsDebugger listening on ws://127.0.0.1:9229/xxxxxxx. For help, see: https://nodejs.org/en/docs/inspectorNode 在 9229 端口开启 WebSocket 调试服务等待调试客户端连接。1.1--inspect-brk在第一行暂停node--inspect-brk app.js启动时第一行代码就暂停——适合代码很早就想打断点的情况。1.2 自定义端口node--inspect9222app.js默认 9229 端口被占用时显式指定。二、Chrome DevTools 远程调试node--inspectapp.jsChrome 访问chrome://inspect会看到Remote Target └── Node.js app.js (file:///path/to/app.js) inspect点击inspect→ 打开 DevTools →Sources面板左侧文件树 → 找到要调试的文件行号左键打断点红点代码执行到该行时自动暂停右侧Scope看当前作用域的变量顶部按钮Resume/Step Over/Step Into/Step OutWS 9229Node 进程--inspectChrome DevTools三、VSCode 调试VSCode 比 Chrome DevTools 更方便——直接在编辑器里打断点。3.1 配置 launch.json.vscode/launch.json{ version: 0.2.0, configurations: [ { type: node, request: launch, name: 启动并调试, program: ${workspaceFolder}/app.js, restart: true, console: integratedTerminal }, { type: node, request: attach, name: 附加到已有进程, port: 9229, restart: true } ] }两种模式LaunchVSCode 启动 Node 进程 附加调试器AttachNode 进程已启动node --inspectVSCode 附加上去3.2 使用按F5启动调试。代码左侧红点 断点。VSCode 调试面板区域作用Variables当前作用域的所有变量Watch自定义监视表达式如user.idCall Stack函数调用栈Breakpoints列出所有断点Debug Console实时执行表达式四、nodemon --inspect开发期调试最常见组合——文件改了自动重启 断点还在nodemon--inspectapp.js[nodemon] starting node --inspect app.js Debugger listening on ws://127.0.0.1:9229/xxxx或者在package.json里{ scripts: { debug: nodemon --inspect app.js } }npmrun debug五、断点类型5.1 行断点点击行号左侧——执行到这一行就停。5.2 条件断点右键断点 →Edit Breakpoint→ 写条件// 只有 user.id 1 时才停 user.id 15.3 日志断点不暂停右键断点 →Log Message用户登录: {user.email}, IP: {req.ip}不暂停执行只在控制台输出变量值——比 console.log 优雅。5.4 异常断点VSCode 调试面板 →Breakpoints勾选All Exceptions代码抛任何未捕获异常都会暂停在抛出位置——调试最难找的 bug 的利器。六、单步执行操作VSCode 快捷键Chrome DevTools作用继续F5Resume跑到下一个断点单步跳过F10Step Over执行当前行不进入函数单步进入F11Step Into进入函数内部单步跳出ShiftF11Step Out跳出当前函数重启CtrlShiftF5-重新启动调试停止ShiftF5-结束调试七、调试技巧7.1 Watch 复杂表达式// 监视每次暂停时求值 user.orders.length user.orders.filter(o o.status paid).length7.2 Debug Console 实时执行// 在暂停状态下输入表达式直接看结果 user.id JSON.stringify(user) await db.query(SELECT count(*) FROM users)7.3 Source MapTypeScript / ESM source map 才能断点到原始代码{ compilerOptions: { sourceMap: true } }VSCode / Chrome 自动识别*.map文件断点命中到.ts/.mjs源文件。八、生产环境调试::: danger永远不要在生产开启--inspect——它允许任何人连接 9229 端口执行任意代码等于把服务器控制权交出去。:::如需排查生产问题手段适用APMNew Relic / Datadog / 阿里云 ARMS性能监控、慢请求分析日志聚合ELK / Loki错误日志检索OpenTelemetry分布式追踪错误上报Sentry异常捕获 源码定位九、最佳实践场景推荐本地开发VSCode --inspect 条件断点复杂数据流Chrome DevTools Source异步回调难定位VSCode 异常断点All Exceptions项目调试配置.vscode/launch.json提交到仓库团队共享launch.json用${workspaceFolder}模板化生产永远不开--inspect用 APM 日志十、小结node --inspect app.js启动 Node Inspector 协议9229 端口Chrome DevToolschrome://inspect远程调试VSCode.vscode/launch.json本地调试断点类型行断点 / 条件断点 / 日志断点 / 异常断点单步F10 跳过 / F11 进入 / ShiftF11 跳出nodemon --inspect是开发期调试黄金组合生产不开--inspect——用 APM / 日志聚合替代