Node.js代码调试工具全攻略技巧分享

Node.js是一个基于Google Chrome浏览器中使用的V8引擎的JavaScript运行时,广泛应用于构建跨平台的服务器端和终端应用程序。在过去十年中,Node.js因其易安装性、实用性和高效性能而广受欢迎,使客户端Web开发人员能够更灵活地发挥技能。然而,软件开发始终充满挑战,Node.js代码偶尔会出现问题。本教程将介绍多种实用工具,帮助您调试应用程序并找出问题根源。值得注意的是,Deno作为JavaScript的替代运行时,与Node.js相似但更新,已消除部分裂缝和不一致,以下工具和信息同样适用于Deno应用程序。

### 调试概述

Node.js代码调试工具全攻略技巧分享

“调试”是指修复软件缺陷的各种方法的总称。虽然修复错误本身通常较为简单,但查找错误原因往往更为复杂,可能耗费数小时。以下部分将介绍三种常见的错误类型。

#### 语法错误

Node.js代码调试工具全攻略技巧分享

当您的代码不符合语言规则时,就会发生语法错误,例如省略右括号或拼写错误的语句(如console.lag(x))。优秀的代码编辑器能够通过多种方式帮助发现这些问题:

– 对有效或无效语句进行颜色编码
– 类型检查变量
– 自动完成函数和变量名
– 突出显示匹配的括号
– 自动缩进代码块
– 检测无法访问的代码

Node.js代码调试工具全攻略技巧分享

VS Code和Atom等免费编辑器为Node.js、JavaScript和TypeScript(可转换为JavaScript)提供了出色的支持,通常在保存和测试代码前就能发现基本语法问题。ESLint作为Node.js工具,可通过以下命令全局安装:

“`bash
npm i eslint -g
“`

Node.js代码调试工具全攻略技巧分享

使用以下命令从命令行检查JavaScript文件:

“`bash
eslint mycode.js
“`

Node.js代码调试工具全攻略技巧分享

但使用编辑器插件更便捷,例如VS Code的ESLint或Atom的linter-eslint,它们能在您键入时自动验证代码。

#### 逻辑错误

Node.js代码调试工具全攻略技巧分享

您的代码可能运行但不按预期工作,例如用户未注销、报告显示不正确数字或数据未完全保存到数据库中。逻辑错误可能由以下原因引起:

– 使用错误的变量
– 不正确的条件,如if (a > 5)而非if (a 提示:

Node.js代码调试工具全攻略技巧分享

“`
$ node inspect .\mycode.js
< Debugger listening on ws://127.0.0.1:9229/143e23fb
< For help, see: https://nodejs.org/en/docs/inspector
< ok
< Debugger attached.
1 const count = 10;
“`

输入帮助查看命令列表。通过以下命令逐步完成应用程序:

Node.js代码调试工具全攻略技巧分享

– `cont`或`c`:继续执行
– `next`或`n`:运行下一个命令
– `step`或`s`:进入被调用的函数
– `out`或`o`:跳出函数并返回调用语句
– `pause`:暂停代码
– `watch(‘myvar’)`:观察变量
– `setBreakPoint()`或`sb()`:设置断点
– `restart`:重新启动脚本
– `.exit`或`Ctrl`|`Cmd + D`:退出调试器

这种调试方式较为繁琐,仅在无其他选项时使用,例如远程服务器上无法连接或安装其他软件时。

Node.js代码调试工具全攻略技巧分享

#### 使用Chrome浏览器调试Node.js代码

node inspect启动的Web Socket服务器在localhost端口9229上监听,并提供基于文本的调试客户端。也可使用图形客户端,如Google Chrome和基于Chrome的浏览器(Chromium、Edge、Opera、Vivaldi、Brave等)。

Node.js代码调试工具全攻略技巧分享

启动应用程序时启用V8调试器Web Socket服务器:

“`bash
node –inspect index.js
“`

Node.js代码调试工具全攻略技巧分享

注意使用–inspect双破折号,避免启动文本调试器。若需文件更改时自动重启,可使用nodemon:

“`bash
nodemon index.js
“`

Node.js代码调试工具全攻略技巧分享

调试器默认只接受本地连接。若在其他设备、虚拟机或Docker容器上运行,使用:

“`bash
node –inspect=0.0.0.0:9229 index.js
“`

Node.js代码调试工具全攻略技巧分享

也可使用–inspect-brk在第一行停止处理:

“`bash
node –inspect-brk index.js
“`

打开Chrome浏览器,输入chrome://inspect查看本地和联网设备。若应用程序未显示为Remote Target,则:

– 单击Open dedicated DevTools for Node并选择地址和端口
– 检查Discover network targets,添加运行设备的IP地址和端口
– 单击Target的inspect链接启动DevTools调试器

Chrome开发工具的Sources面板允许加载、编辑和保存文件。直接从DevTools加载文件更便捷:

– 将项目文件夹添加到工作区
– 从左侧目录树加载文件
– 单击行号设置断点

调试基于断点,指定调试器暂停程序执行的位置。右侧面板显示:

– 操作图标工具栏
– Watch窗格:监视变量
– Breakpoints窗格:显示断点列表
– Scope窗格:显示变量状态
– Call Stack窗格:显示函数调用层次结构

Paused on breakpoint上方显示的操作图标:

– `resume execution`:继续处理
– `step over`:执行下一个命令,不跳转函数
– `step into`:执行并跳转函数
– `step out`:继续到函数结束
– `step`:类似step into,但跳过异步函数
– `deactivate all breakpoints`:禁用所有断点
– `pause on exceptions`:错误时停止处理

#### 条件断点

有时需要更多控制断点。例如,循环迭代1000次,但只关心最后一次状态:

“`javascript
for (let i = 0; i < 1000; i++) {
// set breakpoint here
}
“`

右键单击该行,选择Add conditional breakpoint并输入条件,如i = 999:

“`javascript
for (let i = 0; i < 1000; i++) {
// set conditional breakpoint here
}
“`

Chrome以黄色显示条件断点,仅在循环最后一次迭代时触发。

#### 日志点

日志点无需代码即可实现console.log()功能。当代码执行到某行时,输出表达式但不停止处理。右键单击任意行,选择Add log point并输入表达式,如'loop counter i', i:

“`javascript
for (let i = 0; i < 1000; i++) {
// add log point here
}
“`

DevTools控制台输出loop counter i: 0到loop counter i: 999。

### 使用VS Code调试Node.js应用程序

VS Code是Microsoft开发的免费代码编辑器,支持Node.js并具有内置调试客户端。大多数应用程序无需配置即可调试;编辑器自动启动调试服务器和客户端。

打开启动文件(如index.js),激活Run and Debug窗格,选择Node.js环境。单击任意行设置断点,然后打开应用程序——VS Code在到达断点时停止。

VS Code的Variables、Watch、Call Stack和Breakpoints窗格与Chrome DevTools类似。Loaded Scripts窗格显示已加载脚本。操作图标工具栏允许:

– `resume execution`:继续处理
– `step over`:执行下一个命令,不跳转函数
– `step into`:执行并跳转函数
– `step out`:继续到函数结束
– `restart application and debugger`:重启应用程序和调试器
– `stop application and debugger`:停止应用程序和调试器

右键单击任意行可添加Conditional breakpoints和Log points。

#### VS Code高级调试配置

若需在另一台设备、虚拟机或使用其他启动选项(如nodemon),则需进一步配置。VS Code将调试配置存储在项目目录.vscode/launch.json文件中。

打开Run and Debug窗格,选择Node.js环境生成launch.json文件。可定义多个配置:

“`json
{
"version": "0.2.0",
"configurations": [
{
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"name": "nodemon",
"program": "${workspaceFolder}/index.js",
"request": "launch",
"restart": true,
"runtimeExecutable": "nodemon",
"skipFiles": ["/**" ],
"type": "pwa-node"
}
]
}
“`

保存文件后,nodemon配置出现在Run and Debug窗格。单击绿色运行图标使用nodemon启动应用程序。与之前类似,可添加断点、条件断点和日志点。主要区别在于nodemon会自动重启服务器。

VS Code扩展还可帮助调试远程或隔离服务器环境中的代码:

– Remote — Containers:连接到Docker容器中的应用程序
– Remote — SSH:连接到远程服务器
– Remote — WSL:连接到Linux的Windows子系统(WSL)上运行的应用程序

### 其他Node.js调试选项

Node.js调试指南涵盖多种文本编辑器和IDE,包括Visual Studio、JetBrains WebStorm、Gitpod和Eclipse。Atom提供node-debug扩展,将Chrome DevTools调试器集成到编辑器中。

上线后,可考虑使用商业调试服务,如LogRocket和Sentry.io,记录和回放真实用户遇到的客户端和服务器错误。

### 小结

JavaScript调试曾长期困难,但近年来已有显著改进。选择实用工具定位问题,console.log()适用于快速查找bug,但Chrome DevTools或VS Code更适用于复杂问题。这些工具帮助您编写更强大的代码,减少修复错误的时间。

文章网址:https://www.wpbull.com/jiqiao/645.html