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

1
2
3
4
5
6
7
// app.js
global.x = 5;
setTimeout(() => {
    debugger;
    console.log('world');
}, 1000);
console.log('hello');

node inspect

调试模式运行脚本之后,默认断点在第一行,可以使用cont指令通过断点继续执行代码,使用next指令断点到下一行代码,使用step指令进入函数,或者out跳出函数,如果需要查看更多指令,使用help即可。

Node inspector

node-inspector是一个开源的 Node.JS 调试工具,提供了前端开发熟悉的 Chrome DevTool 类似的体验。

可以使用 npm 来全局安装这个工具

1
npm install node-inspector -g

对于需要调试的脚本,执行下面的命令

1
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 项目,可以填写如下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "启动程序",
            "program": "${workspaceFolder}/app.js"
        }
    ]
}

上面添加了一个调试启动项,直接在 VSCode 内启动调试,启动之后会提供一个悬浮工具栏,提供调试的一些指令发送操作。

vscode debug

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 工具中列出来

chrome inspect

直接点击对于应用的inspect按钮,打开Chrome devtools窗口,就可以愉快调试 Node 应用了。

chrome devtools for node

参考链接