Node.js技术原理分析系列——Node.js调试能力分析

[复制链接]
查看6617 | 回复0 | 2025-2-15 12:57:07 | 显示全部楼层 |阅读模式

 openeuler安装mysql

  Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。

  本系列将分为9篇文章为大家介绍 Node.js 技术原理:从调试能力分析到内置模块新增,从性能分析工具 perf_hooks 的用法到 Chrome DevTools 的性能问题剖析,再到 ABI 稳定的理解、基于 V8 封装 JavaScript 运行时、模块加载方式探究、内置模块外置以及 Node.js addon 的全面解读等主题,每一篇都干货满满。

  inspector 是什么

  直接取官方文档中,对 inspector 的定义:

  The node:inspector module provides an API for interacting with the V8 inspector.

  翻译过来就是,inspector 模块提供了一组用于和 V8 inspector 交互的 API 。

  解读:

  node inspector 是 Node.js 内置模块

  node inspector 仅提供与 V8 inspector 交互的能力,其本身并没有调试能力

  Node.js 调试能力来自 V8 inspector

  Node.js 调试原理

  调试的目的是通过观察运行时数据来定位问题。Node.js 的运行时数据由 V8 引擎管理,为了实现调试功能,V8封装了一套 api 供外部查看运行时数据,这套 api 名字就是 V8 inspector(运行时是一个 websocket 服务)。V8 inspector 由于调试协议不同,不能直接与 Chrome DevTools 交互,于是 Node.js 提供了 inspector 模块,运行时也会启动一个 websocket 服务,用于适配。

  如图所示,进入 Node.js 调试模式前,主线程需要创建一个 debugger server( websocket 服务,即时通讯服务,也即 node inspector ),用来实现 debugger client(例如 vscode 调试器或 Chrome DevTools ) 与 V8 inspector 通信,V8 inspector 再获取 Node.js 服务的数据,最终实现单步调试等功能。

  经过封装与简化后,launch 模式启动调试时我们甚至感知不到 debugger server 了,但是它一定是存在的。

  深入分析 – inspect 参数

  分析过程中,我对相关源码做了粗读,除了源码本身,还参考了这篇文章:https://theanarkh.github.io/unde ... ter24-Inspector/#11

  如上图所示,表示的是 Node.js 调试模式启动过程,大部分节点都是中文表述+函数名。

  当我们用 node --inspect test.js 启动一个 js 脚本时,程序会启动 debugger server(一个 websocket 服务)。如上图所示,相关逻辑都在初始化 inspector 部分(蓝色节点),接下来细看一下这部分代码。


免责声明

1.本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
2.如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

上一篇:aurusDB二级分区,提升企业数据库管理效能
下一篇:华为云GaussDB助力国家统计局, 开启统计现代化改革新篇章

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

2061

主题

0

回帖

2061

积分

少尉

积分
2061