设为首页收藏本站

安而遇随-随遇而安

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6|回复: 0

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

[复制链接]
发表于 2025-2-15 12:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

 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 部分(蓝色节点),接下来细看一下这部分代码。


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

本版积分规则

快速回复 返回顶部 返回列表