Skip to content
On this page

基础篇 3-欲善事先利器 —— Node.js 调试技巧


基础篇 3:欲善事先利器 —— Node.js 调试技巧

在技术选型基本明确之后,跃跃欲试的你,是否已迫不及待地撸起袖子想动手编码了呢?且稍安勿躁,任何一种语言的开发过程,都离不开代码调试的环节。是频繁地修改代码,加入打印日志?还是优雅地采用断点工具?代码修改后的重运行,是每次不厌其烦地机械地手动操作?还是将机械的重复机智地交给了程序机器?

借力于适当的调试工具与采用恰到好处的调试技巧,往往能在一个长线的开发周期里,帮助我们节省大量宝贵的时间。越早找到对应技术路线下的高效调试手法,越能长久受益。所以请沉住心,Node.js 的常用调试技巧了解一下,磨刀不误砍柴工,做好准备再出发也不迟。

console.log

console.log 是从事 JavaScript 开发伙伴们最熟悉不过的控制台打印语句。在 JavaScript 代码的任意可执行位置加入 console.log,最终都会以代码被执行的先后顺序,在控制台打印输出结果。

// app.js
console.log('hello nodejs')
$ node app.js
# 输出 hello nodejs

Supervisor / nodemon / PM2

许多服务脚本,当修改了文件内容时必须重新启动才能完成数据的更新操作,这会大大降低开发效率。 Node.js 在更新操作时必须终止 Node.js 然后重新运行,这种模式不利于开发阶段。

有不少 Node.js 小工具能帮助我们监视代码的改动然后自动重启 Node.js 服务,好用的工具有 Supervisor / nodemon / PM2,这里我们介绍一个轻量级的 Supervisor。

# 系统全局安装 supervisor
$ npm i -g supervisor

安装成功后,回到项目的根目录,将 node app.js 的启动命令,换成 supervisor app.js 。待服务启动后,尝试修改 node.js 项目代码,观察 terminal 终端里的输出变化。

node-inspector + Chrome

Node.js 原生 Debugger 模块使用的是 V8-Debug Protcol,而且 DevTools 使用 Chrome Debugging Protcol。所以 node-inspector 在其中起到了翻译和转达的作用。

V8 Inspector Integration 可以让 DevTools 直接连接 Node.js 的 Debugger 进行调试。

新版本的 Chrome 浏览器和新版本的 Node.js 支持通过一个新的调试协议能互相直接通讯了,就不再需要 node-inspector 了。

支持最新调试模式的版本需求

  • Node.js 6.3+
  • Chrome 55+

调试步骤

  1. 运行 node -- inspect app.js。
    
$ node --inspect app.js
  1. 打开 Chrome 浏览器,在地址栏输入 chrome://inspect ,我们可以在 Remote Target 中找到我们所需要定位的 Node.js 服务目标,选择进入 chrome-devtools。

  1. 在 Sources 页签下的 Filesystem ,通过 Add folder to workspace 来添加当前要断点调试的 JavaScript 源代码。

在首次添加源代码目录的时候,有可能因操作系统权限的缘故,被要求授权访问该目录,选择允许即可。

  1. 选择需要增加断点的 JavaScript 代码,打上断点标记,执行 Node.js 服务,查看断点流程。

VS Code

VS Code 是一个强大的轻量级开发工具,可以很方便地提供对 Node.js 的调试。

  1. 进入左侧的调试模式。

  1. 创建启动程序的配置,如果启动程序从未配置,选择 Node.js,系统会默认生成一个 .vscode/launch.json 的配置,其中的 program 属性,用于指向需要启动的 Node.js 文件。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "启动程序",
      "program": "${workspaceFolder}/app.js"
    }
  ]
}

在 VS Code 官方的 FAQ 中,比较建议为 program 增加一个 ${workspaceFolder} 来动态地标记项目启动的目录配置。这样即使后续项目工程目录修改,或者与他人协同,都不需要更新启动项的目录配置信息。

在早先版本的 VS Code 中,开发者可以用相对路径的语法来配置路径,但在你使用 debugging session 的时候,依旧建议你使用 ${workspaceFolder} 来作为前缀。

  1. 启动左上角的调试小按钮,就可以得到如下标记的断点调试常用功能:
  • 断点变量
  • 断点流程控制
  • 控制台

小结

关键词:控制台打印,自动重启,断点调试

本小节介绍的几种调试方式,总体而言,解决了三种开发场景的问题:

  • 控制台快速打印输出信息,使用 console.log
  • 文件修改自动重启服务,使用 Supervisor
  • 断点调试,推荐使用 VS Code (Chrome 下的 devtool 作为第二选择)

在适当的开发场景下,选择适当的调试手法和工具,一定可以事半功倍。