如何使用多种工具调试Node.js代码__wordpress教程

如何使用多种工具调试Node.js代码__wordpress教程

Node.js是一个JavaScript运行时,基于与Google Chrome浏览器中使用的相同的V8引擎。它通常用于构建跨平台的服务器端和终端应用程序。Node.js在过去十年中变得越来越流行,因为它易于安装、实用、速度快,并且允许客户端Web开发人员在其他地方利用他们的技能。

但是,软件开发仍然是一项复杂的任务,您的Node.js代码有时会失败。本教程演示了各种工具来帮助调试应用程序并找出问题的原因。

Tips:Deno是一个替代的JavaScript运行时。它与Node.js相似,但更新,它消除了一些裂缝和不一致。下面的工具和信息通常可以应用于Deno应用程序和Node.js。

  1. 调试概述
  2. 设置适当的Node.js环境变量
  3. 使用Node.js命令行选项
  4. 将消息输出到控制台
  5. 使用第三方日志系统
  6. 使用V8检查器
  7. 使用Chrome浏览器调试Node.js代码
  8. 条件断点
  9. 日志点
  10. 使用VS Code调试Node.js应用程序
  11. VS Code高级调试配置
  12. 其他Node.js调试选项

调试概述

“调试”是修复软件缺陷的各种方法的名称。修复错误通常很简单。查找错误的原因可能要复杂得多,并且需要花费数小时的时间。

以下部分描述了您将遇到的三种一般类型的错误。

语法错误

您的代码不遵循语言规则——例如,当您省略右括号或拼写错误的语句,如console.lag(x).

一个好的代码编辑器可以通过以下方式帮助发现常见问题:

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

VS Code和Atom等免费编辑器对Node.js、JavaScript和TypeScript(可转换为JavaScript)提供了很好的支持。在保存和测试代码之前,通常可以发现基本语法问题。

像ESLint这样的代码linter也会报告语法错误、缩进错误和未声明的变量。ESLint是一个Node.js工具,您可以通过以下方式全局安装:

npm i eslint -g

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

eslint mycode.js

…但是使用编辑器插件更容易,例如用于VS Code的ESLint或用于Atom的 linter-eslint,它们会在您键入时自动验证代码:

如何使用多种工具调试Node.js代码__wordpress教程

VS Code中的ESlint

逻辑错误

您的代码运行但未按预期工作。例如,用户在请求时没有注销;报告显示不正确的数字;数据未完全保存到数据库中;等等。

逻辑错误可能由以下原因引起:

  • 使用错误的变量
  • 不正确的条件,例如,if (a > 5)而不是if (a < 5)
  • 未能考虑运算符优先级的计算,例如,1+2*3结果为7而不是9。

运行时(或执行)错误

错误只有在应用程序执行时才会变得明显,这通常会导致崩溃。运行时错误可能由以下原因引起:

  • 除以已设置为零的变量
  • 试图访问不存在的数组项
  • 尝试写入只读文件

尽管以下开发技术可以提供帮助,但逻辑和运行时错误更难发现:

  1. 使用测试驱动开发: TTD鼓励您在开发函数之前编写测试,例如,当Z作为参数传递时,X从函数Y返回。这些测试在初始开发和后续更新期间运行,以确保代码继续按预期工作。
  2. 使用问题跟踪系统:没有什么比声称“您的软件无法运行”的电子邮件更糟糕的了!问题跟踪系统允许您记录特定问题、记录复制步骤、确定优先级、分配开发人员并跟踪修复进度。
  3. 使用源代码控制:Git之类的源代码控制系统将帮助您备份代码、管理修订并确定引入错误的位置。在线存储库,包括Github和Bitbucket,为小型或开源项目提供免费空间和工具。

您仍然会遇到Node.js错误,但以下部分描述了定位该难以捉摸的错误的方法。

设置适当的Node.js环境变量

在主机操作系统中设置的环境变量可以控制Node.js应用程序和模块设置。最常见的是NODE_ENV,通常在调试时设置为开发,或者在实时服务器上运行时设置为生产。在macOS或Linux上设置环境变量:

NODE_ENV=development

或在(经典)Windows命令提示符下:

set NODE_ENV=development

或Windows Powershell:

$env:NODE_ENV="development"

在流行的Express.js框架中,将NODE_ENV设置为development会禁用模板文件缓存并输出详细的错误消息,这在调试时可能会有所帮助。其他模块可能提供类似的功能,您可以在应用程序中添加NODE_ENV条件,例如

// running in development mode?
const devMode = (process.env.NODE_ENV !== 'production');
if (devMode) {
console.log('application is running in development mode');
}

您还可以使用Node的util.debuglog方法有条件地输出错误消息,例如

import { debuglog } from 'util';
const myappDebug = debuglog('myapp');
myappDebug('log something');

此应用程序仅在NODE_DEBUG设置为 myapp 或 * 或 my* 等通配符时才会输出日志消息。

使用Node.js命令行选项

节点脚本通常使用node后跟入口脚本的名称来启动:

node app.js

您还可以设置命令行选项来控制各种运行时方面。用于调试的有用标志包括:

  • --check语法检查脚本而不执行
  • --trace-warnings当JavaScript Promises未解析或拒绝时输出堆栈跟踪
  • --enable-source-maps使用TypeScript等转译器时显示源映射
  • --throw-deprecation使用已弃用的Node.js功能时发出警告
  • --redirect-warnings=file将警告输出到文件而不是stderr
  • --trace-exit调用时输出堆栈跟踪process.exit()

将消息输出到控制台

输出控制台消息是调试Node.js应用程序的最简单方法之一:

console.log(`someVariable: ${ someVariable }`);

很少有开发人员意识到还有许多其他控制台方法:

控制台方法 描述
.log(msg) 标准控制台消息
.log('%j', obj) 将对象输出为紧凑的JSON字符串
.dir(obj, opt) 漂亮打印对象属性
.table(obj) 以表格格式输出数组和对象
.error(msg) 错误信息
.count(label) 增加一个命名的计数器和输出
.countReset(label) 重置命名计数器
.group(label) 缩进一组消息
.groupEnd(label) 终止一个组
.time(label) 启动一个命名的计时器
.timeLog(label) 报告经过的时间
.timeEnd(label) 停止一个命名的计时器
.trace() 输出堆栈跟踪(所有函数调用的列表)
.clear() 清除控制台

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/2766.html

(0)
匿名
上一篇 2023年12月14日 下午4:58
下一篇 2023年12月14日 下午4:59

相关推荐

新手站长从“心”出发,感谢16年您始终不离不弃。