一些调试 Node.js 程序的快捷方法

一些调试 Node.js 程序的快捷方法

在调试程序时总是会遇到各种挑战。 Node.js 的异步工作流为这一艰巨的过程增加了额外的复杂性。尽管 V8 引擎为了方便访问异步栈跟踪进行了一些更新,但是在很多数情况下,我们只会在程序主线程上遇到错误,这使得调试有些困难。同样,当我们的 Node.js 程序崩溃时,通常需要依靠一些复杂的 CLI 工具来分析核心转储。

在本文中,我们将介绍一些调试 Node.js 程序的简便方法。【视频教程推荐:node js教程 】

日志记录

当然,没有哪一个开发工具箱是不提供日志的。我们倾向于在本地开发中的整个代码中放置 console.log 语句,但这并不是生产中真正可扩展的策略。你可能需要进行一些过滤和清理,或者实施一致的日志记录策略,以便从中识别出重要的信息。

要实施适当的面向日志的调试策略,可以用 Pino或 Winston 之类的日志记录工具。这些将允许你设置日志级别(INFO、 WARN、ERROR),它们允许你在本地打印详细的日志消息,同时在生产环境下仅打印严重的日志消息。你还可以将这些日志流式传输到聚合器或其他地方,例如 LogStash,Papertrail 甚至 Slack。

使用 Node Inspect 和 Chrome DevTools

日志记录只能使我们了解程序为何无法按预期运行。对于复杂的调试,我们将希望使用断点来检查代码在执行时的行为。

为此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附带的调试工具。它实际上只是程序的 Chrome DevTools 的实现,可让你添加断点、控制分步执行、查看变量、并遵循调用堆栈。

有两种方法启动 Node Inspect,但最简单的方法可能就是使用 –inspect-brk 标志来调用 Node.js 应用程序:

$ node --inspect-brk $your_script_name

登录后复制

1.png

启动程序后,前往 Chrome 浏览器中的 chrome://inspect URL 进入 Chrome DevTools。借助 Chrome DevTools,你可以拥有在浏览器中调试 JavaScript 时的所有功能。最有用的功能是检查内存的能力。你可以获取堆快照并配置内存使用情况,以了解内存的分配方式以及可能的方式及内存泄漏的情况。

使用受支持的IDE

许多现代 IDE 不但能够以某种方式启动程序,而且还支持调试 Node 程序。除了具有 Chrome DevTools 中的许多功能外,它们还具有自己的功能,例如可以创建日志点并允许你创建多个调试配置文件。可以通过查阅有关检查器客户端的 Node.js 指南来获取有关这些 IDE 的更多信息。

使用NDB

2.png

另一种选择是安装 ndb,它是 Node.js 的独立调试器,和浏览器中的 DevTools 类似,就像一个隔离的本地调试器一样。它还有一些在 DevTools 中不可用的额外功能。它支持本地编辑,这意味着你可以修改代码并得到调试器平台直接支持的更新逻辑。这对于进行快速迭代非常有用。w

事后调试

假设你的程序由于灾难性错误(例如内存访问错误)而崩溃。这些可能很少见,但确实会发生,特别是如果你的应用程序依赖于本机代码。

要调查这类问题,可以使用 llnode。当程序崩溃时,llnode 可以通过将 JavaScript 堆栈框架和对象映射到 C/C++ 端的对象来检查它们。为了使用它,你首先需要程序的核心转储。为此你需要使用 process.abort 而不是process.exit 来关闭代码中的进程。当你使用 process.abort 时,Node 进程在退出时会生成一个核心转储文件。

为了更好地理解 llnode 可以提供的功能,这个视频演示了其一些功能。

有用的 Node 模块

除了上述所有以外,还建议用第三方软件包做进一步调试。

debug

第一个被简单地称为 debug。使用 debug,你可以基于函数名或整个模块为日志消息分配特定的命名空间。然后可以通过特定的环境变量选择将哪些消息打印到控制台。

例如,这是一个 Node.js 服务器,它正在记录来自整个程序和中间件栈的几条消息,例如 sequelize,express:application 和 express:router:

4.png

如果我们将 DEBUG 环境变量设置为 express:router 并启动相同的程序,则仅显示标记为 express:router 的消息:

5.png

通过以这种方式过滤消息,可以深入研究程序单个部分的行为方式,而无需大幅度更改代码的日志记录。

trace  与 clarify

trace 和 clarify 两个模块最好在一起配合使用。

trace 通过提供有关被调用的异步方法的更多详细信息来扩展你的异步栈跟踪,这是 Node.js 默认不提供的路线图。 clarify 通过从特定于 Node.js 内部的栈跟踪中删除所有信息来提供帮助。这使你可以专注于仅针对程序的函数调用。

这些模块都不建议在生产环境中运行!仅在本地开发环境中进行调试时才应启用它们。

更多编程相关知识,可访问:编程教学!!

以上就是一些调试 Node.js 程序的快捷方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2635314.html

(0)
上一篇 2025年3月7日 04:42:04
下一篇 2025年3月7日 04:42:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 深入浅析Node.js 中的多线程和多进程

    Node.js 是一个免费的跨平台 JavaScript 运行时环境,尽管它本质上是单线程的,但是可以在后台使用多个线程来执行异步代码。 由于 Node.js 的非阻塞性质,不同的线程执行不同的回调,这些回调首先委托给事件循环。 Node.…

    2025年3月7日
    000
  • 深入解析 Node.js 的回调队列

    队列是 Node.js 中用于有效处理异步操作的一项重要技术。【视频教程推荐:node js教程 】 在本文中,我们将深入研究 Node.js 中的队列:它们是什么,它们如何工作(通过事件循环)以及它们的类型。 Node.js 中的队列是什…

    2025年3月7日
    200
  • windows环境下怎么安装nodejs?

    【视频教程推荐:node js教程 】 一、什么是nodejs Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 Jav…

    2025年3月7日 编程技术
    200
  • NodeJs怎么实现下载Excel文件功能?

    nodejs怎么实现下载excel文件功能?下面本篇文章就来给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【视频教程推荐:nodejs 】 nodejs作为一门新的语言,报表功能也不是十分完善。 (1).…

    2025年3月7日
    200
  • 浅谈 Node.js 中间件的工作原理

    什么是 Express 中间件? 中间件在字面上的意思是你在软件的一层和另一层中间放置的任何东西。Express 中间件是在对 Express 服务器请求的生命周期内所执行的函数。每个中间件都可以访问其被附加到的所有路由的 HTTP 请求和…

    2025年3月7日
    200
  • 浅谈Node.js中require()的工作原理

    【视频教程推荐:node js教程 】 大多数人都知道Node.js中require()函数做什么的,但是有多少人知道它的工作原理呢?我们每天使用它加载库包和模块,但是它的内部行为原理很神秘。 我们追寻Node模块系统的核心: module…

    2025年3月7日
    200
  • 使用Node.js “debug”模块避免日志污染应用程序日志

    本篇文章给大家介绍一下使用node.js “debug”模块避免日志污染应用程序日志的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 视频教程推荐:nodejs 教程  你是否有过这样的经历,当把 logging 添…

    2025年3月7日 编程技术
    200
  • 在Node.js中如何使用EventEmitter处理事件?

    在本教程中我们学习 Node.js 的原生 EvenEmitter 类。学完后你将了解事件、怎样使用  EvenEmitter 以及如何在程序中利用事件。另外还会学习 EventEmitter 类从其他本地模块扩展的内容,并通过一些例子了解…

    2025年3月7日
    200
  • 4个使用将HTML转换为PDF的方法介绍

    怎么将html转换为pdf?下面本篇文章将将展示如何使用 node.js、puppeteer、headless chrome 和 docker 从样式复杂的 react 页面生成 pdf 文档。有一定的参考价值,有需要的朋友可以参考一下,希…

    编程技术 2025年3月7日
    200
  • 了解Node.js中的Stream

    相关推荐:《nodejs 教程》 对于大部分有后端经验的的同学来说 Stream 对象是个再合理而常见的对象,但对于前端同学 Stream 并不是那么理所当然,github 上甚至有一篇 9000 多 Star 的文章介绍到底什么是 Str…

    2025年3月7日
    200

发表回复

登录后才能评论