Node.JS 开发过程调试必不可少, 一般常用的调试方法有打日志和断点调试
打日志
Node.JS 中实现了和浏览器 JS 几乎一致的 Console , 在需要较少的调试信息时, 使用 Console 的一些 API 如 log , dir 可以方便的在终端中输出有效的信息, 是一种简洁实用的方法, 但是对于需要较多调试信息, 例如复杂对象预览时这种方法就不太合适了
断点调试
Node Debugger
Node.JS 通过 V8 inspector 和内建的调试客户端来提供了一个进程外的调试工具, 这个调试工具运行时, 可以通过 TCP 协议从外部访问要开启断点, 只需要在需要断点调试的代码中加入 debugger 标签, 当 Node.JS 执行到此处时会自动暂停同时运行脚本也需要额外的标记参数在早期可以使用 node debug app.js , 但是这个 API 现在已经不建议使用, 而是应该使用 node inspect app.js
- // app.js
- global.x = 5;
- setTimeout(() => {
- debugger;
- console.log('world');
- }, 1000);
- console.log('hello');
调试模式运行脚本之后, 默认断点在第一行, 可以使用 cont 指令通过断点继续执行代码, 使用 next 指令断点到下一行代码, 使用 step 指令进入函数, 或者 out 跳出函数, 如果需要查看更多指令, 使用 help 即可
Node inspector
node-inspector 是一个开源的 Node.JS 调试工具, 提供了前端开发熟悉的 Chrome DevTool 类似的体验
可以使用 npm 来全局安装这个工具
npm install node-inspector -g
对于需要调试的脚本, 执行下面的命令
node-debug app.js
同时可以使用 --debug-port 参数指定 Node/V8 debugger 的端口, 默认 5858, --web-port 指定调试 Web 界面路由的端口, 默认 8080
一旦开启调试之后, 可以直接使用 Chrome 或 Opera 浏览器访问
http://localhost:8080/debug?port=5858
进行类似浏览器 JS 的断点调试, 这对于前端开发者再熟悉不过了
但是在 Node v6 之后, Node/V8 加强了内建 Debugger 的功能, node-inspector 工具越来越难以实现一些更高级或者新的调试功能, 因此此工具不再建议使用了
VSCode 调试集成
如果 node-inspector 不建议使用, 要获得更好的调试体验, 可以利用 VSCode, 提供了强大的调试工具, 依托于 Node Debugger , 但是不用手动命令调试了
在项目根目录添加 .vscode 文件夹, 该文件夹内添加 launch.json , 该文件存放 VSCode 调试的配置信息对于 Node.JS 项目, 可以填写如下配置:
- {
- "version": "0.2.0",
- "configurations": [
- {
- "type": "node",
- "request": "launch",
- "name": "启动程序",
- "program": "${workspaceFolder}/app.js"
- }
- ]
- }
上面添加了一个调试启动项, 直接在 VSCode 内启动调试, 启动之后会提供一个悬浮工具栏, 提供调试的一些指令发送操作
Chrome DevTools for Node
在 Node 6.3 + 和 Chrome 55 + 版本上, 它们支持一个新的调试协议直接互相通信, 也就是取代了 node-inspector 工具所做的沟通工作
首先使用 inspect 模式启动应用程序
node --inspect app.js
如果你的应用程序不是一个长期监听的任务, 而是立即退出的话, 需要开启默认第一行中断的模式
node --inspect-brk app.js
也可以为调试监听指定其他的端口, 默认
- 9229
- node --inspect-brk=9222 app.js
在 Chrome 地址栏直接输入 chrome://inspect , 如果我们已经有已经以调试监听模式启用的应用, 会在 Chrome inspect 工具中列出来
直接点击对于应用的 inspect 按钮, 打开 Chrome devtools 窗口, 就可以愉快调试 Node 应用了
参考链接
- Node Console
- Node Debugger
- node-inspector
来源: http://www.tuicool.com/articles/mIZ32mu