Node.js调试大法 — v8_inspector

调试技巧:Chrome DevTools 与 Node.js Inspector 在 Electron 框架的开发流程中,调试技巧是确保代码质量和应用稳定的核心环节。它不仅仅是查找 bug 的工具,更是开发者深入理解应用行为、优化性能和提升效率的利器。想象一下,一个复杂的 Electron 应用如一个多窗口数据可视化工具或实时聊天客户端,它涉及主进程的 Node.js 逻辑、渲染进程的 UI 交互,以及进程间的 IPC 通信。如果没有有效的调试技巧,开发者将面临代码执行不明、内存泄漏难查或渲染卡顿无从下手的困境。Chrome DevTools 和 Node.js Inspector 作为 阅读详情

Node.js 调试基本原理

Node.js 提供了强大的Debugger模块,使用方式如下:

使用debug模式时,Node.js 会启动Debugger模块,然后通过监听默认 5858 端口将命令行的输入传送到内建调试模块以达到调试的目的。

同时支持--debug 和 --debug-brk参数。这两个参数只会启动Debugger监听模式,不会进入命令行调试模式,而且前者会运行完所有代码,通常可用于事件调试,后者会在进入时中断,方便从头开始调试。
进入Debugger监听模式后,可以通过这两种方式连接调试:

node debug <URI> # 通过 URI 连接调试,如 node debug localhost:5858
node debug -p <pid> # 通过 PID 链接调试

命令行调试几乎支持所有调试的功能:断点、单步、步入、步出、变量查看等等。详细说明可参见官方文档

所以无论是IDE 调试工具还是node-inspector都是基于Node.js的Debugger模块进行调试的。

Chrome DevTools与Node.js Debugger结合

Node.js命令行调试因为缺少调试界面,因此使用的人相对比较少。于是就诞生了node-inspector。 它所做的就是让用户可以使用DevTools UI去使用原生的Debugger,使用起来也比较方便

  1. 安装node-inspector
    npm install -g node-inspector
    
  2. 开启node-inspector服务
    node-inspector
    # node-inspector & ### Running in background
    
  3. debug 模式启动程序
    node --debug test.js
    # node --debug-brk test.js # Pause your script on the first line
    
    然后就可以直接用浏览器打开http://127.0.0.1:8080/?port=5858进行调试了。

Node.js原生Debugger模块使用的是V8-Debug Protcol,而且DevTools使用Chrome Debugging Protcol。所以node-inspector在其中起到了翻译和转达的作用。

v8_inspector 诞生

今年5月份,谷歌工程师 ofrobots 提交了一个Add v8_inspector support的PR。同时在5月份的 DevTools Google I/O talk 有提到此功能。

就是说 v8_inspector 可以让 DevTools 直接连接 Node.js的Debugger进行调试。

现如今,新版本的Chrome浏览器和新版本的Node.js支持通过一个新的调试协议能互相直接通讯了,就不再需要node-inspector了。

安装新版本
  1. Node.js 6.3+
    可以从官网安装,目前给官网给到的最新版本是v6.7.0
  2. Chrome 55+
    最新版本的 Chrome 叫 Canary,安装这个版本时不用担心会覆盖老版本的Chrome,会生成另外一个图标。
启用inspect调试模式
  1. 下载好Chrome Canary后,打开chrome://flags/#enable-devtools-experiments
  2. 启用开发者工具实验性功能
  3. 重启Chrome
  4. 打开开发者工具 -> 设置 -> Experiments,按SHIFT键6次,显示隐藏选项后勾选Node debugging

    使用inspect调试
    使用--inspect参数就可以使用最新的调试功能:

在Canary中打开链接即可调试。

使用中的问题

在用v6.7.0测试时发现一直在报错Assertion '(inspector->http_parsing_state) == (nullptr)' failed.

发现很多人有出现过这个问题,参见这里
这是一个已经修复的bug,但是v6.7.0中没有包含,解决方案就是安装v7.x版本,两种安装方式:

  1. 下载源码安装
# Install windows-build-tools
npm install --global --production windows-build-tools

# Download source code
git clone https://github.com/nodejs/node.git
cd node
git checkout remotes/origin/v7.x

# Build
# vcbuild nosign x64 # 64-bit build on windows
vcbuild nosign
  1. 下载 v7.0.0-nightly 安装包安装

使用新版本彻底解决了这个问题。

Node 调试指南 —— Inspector 协议 Node v6.3+ 的版本提供了两个用于调试的协议:v8 Debugger Protocol 和 v8 Inspector Protocol 可以使用第三方的 Client/IDE 等监测和介入 Node(v8) 运行过程,进行调试。 v8 Debugger Protocol 是 Node v6.3 之前的版本就支持的调试协议,使用一个 TCP 端口(通常是 5858)与Clien 阅读详情

相关推荐

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

Node.js 提供了丰富而强大的调试能力,从简单的控制台日志到复杂的性能分析工具。掌握这些调试技术对于构建高质量、高性能的 Node.js 应用至关重要。随着 Node.js 的不断发展,其调试能力也在持续增强,为开发者提供更好的工具来解决复杂问题。通过合理利用这些调试能力,开发者可以更高效地诊断和解决 Node.js 应用中的各种问题,从而提高应用的稳定性和性能。

qu1210的博客 1376

深入理解 V8 Inspector

前言:本文介绍一下 V8 关于 Inspector 的实现,不过不会涉及到具体命令的实现,V8 Inspector 的命令非常多,了解了处理流程后,如果对某个命令感兴趣的话,可以单独去分析。 首先来看一下 V8 Inspector 中几个关键的角色。 1. V8InspectorSession class V8_EXPORT V8InspectorSession { public: // 收到对端端消息,调用这个方法判断是否可以分发 static bool canDispatchMethod(St

标子 的专栏 1151

分析 Node.js 中的调试工具,例如 V8 Inspector Protocol 和 Chrome DevTools,如何进行远程调试和性能剖析。

但是,别怕,V8 Inspector Protocol 和 Chrome DevTools 就是咱们的夜视仪和显微镜,让调试不再是玄学,而是科学!今天咱们不搞虚的,直接深入到 Node.js 的调试核心,聊聊 V8 Inspector Protocol 和 Chrome DevTools 如何带我们飞。V8 Inspector Protocol,说白了,就是 V8 引擎(Node.js 的底层引擎)对外暴露的一套调试接口。连接成功后,你就可以像调试前端代码一样调试 Node.js 代码了。

weixin_41455464的博客 622

nodejs v8 remote debugger

默认情况下V8引擎支 持的调试模式是本地模式。如果想要开启远程调试的话,我们需要修改Nodejs中的V8源文件:/deps/v8/src/platform- posix.cc addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK ); --> INADDR_ANY addr.sin_p

DouKeKe的专栏 1401

Node.js 诊断工具:V8 Inspector Protocol 与 Heap Profiler 的使用

V8 Inspector Protocol是Node.js开发者手中一把锋利的解剖刀,它赋予我们深入V8引擎内部的能力。通过熟练运用Chrome DevTools的Heap Profiler功能,结合对内存泄漏模式的理解,我们能够有效地识别、诊断和解决Node.js应用程序中的内存问题。而借助等库进行编程访问,更可以实现诊断流程的自动化,将性能分析融入到开发和运维的各个环节。掌握这些工具和方法,是构建高性能、高稳定性的Node.js应用不可或缺的技能。

weixin_41455464的博客 888

VS2019谷歌V8引擎8.4版本,编译好的Release版DLL和LIB,和测试demo

VS2019谷歌V8引擎8.4版本64位版本,编译好的Release版DLL和LIB,和测试demo 下载即可使用。 window版本 已经包含include,文件齐全。

搞定 NodeJS 开发调试

代码调试有时候是一种充满挑战的工作,如果有一个趁手的调试工具的话,往往可以做到事半功倍的效果。得益于这些年的快速发展,在 NodeJS 生态中已经有了多种调试工具可以使用。我们今年就来分享几个常用的调试工具。 在 NodeJS 的代码调试中,通常又两大类调试方法,一种是打印日志,另一种是直接调试代码。我们现在来分别说明。 日志 日志可以帮助我们记录在程序运行过程中的一些状态和错误信息。通过日志,我们可以快速的找到出问题的代码。比如借助于异常日志,我们可以快速的定位到具体的代码行。 debug 模块

qq_30338791的博客 266

v8_9.7_msvc142_x86_x64.rar

v8_9.7_msvc142_x86_x64.rar

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

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

OpenTiny的博客 1813

v8-inspector-api:一个用于访问V8检查器的简单节点模块以及一些用于导出和读取数据的工具

目的 “检查器”模块周围的简单包装。 基本上,它增加了: promises和async / await语法 S3出口商 兼容性 /!\此模块使用async / await语法和检查器模块,这就是为什么必须具有节点8.0+的原因。 支持和测试:> = 8.0 版本 支持的 经过测试 14.x 是的 是的 12.x 是的 是的 10倍 是的 是的 9.x 是的 是的 8.x 是的 是的 为了拥有所有功能,我们建议至少使用Node.js版本10或更高版本。 安装 $ npm install inspector-api --save 用法 CPU分析 const Inspector = require ( 'inspector-api' ) const inspector = new Inspector ( ) await inspector . profiler . enable

v8-inspector:V8检查器后端

V8检查器后端 这是一个旨在向V8添加调试功能的实验。 UI部分应该是通过远程调试协议与v8检查器通信的常规Chrome DevTools。 所有代码均来自Chromium r330774(be901d619720e6d9f23e1585a5039079877e9d30),Blink r195622(1d565c27217eeadb958cf702dc526f4b06bf8447)​​和V8 r4.5.7(73ef6572a4e79f51f4591d3f76b6175) 生成并运行 先决条件-请参阅Chromium先决条件。 目前,这仅适用于Linux。 在存储库的根目录下,运行以下脚本: $ ./tools/gyp_v8inspector.py $ ninja -C out/Release/ v8inspector_main -j100 在启用远程调试的情况下运行脚本: $ .

V8 Inspector Protocol 调试指南:从 d8 双向通道到嵌入者集成实战

本篇技术指南围绕 V8 官方文档《Debugging over the V8 Inspector Protocol》展开,面向需要在自研引擎、Node.js 类宿主或测试框架中实现调试支持的嵌入者(Embedder)。读完本文,你将掌握 Inspector 协议中"嵌入者 → V8"与"V8 → 嵌入者"两条消息通道的底层机制,能够用 `d8 --enable-inspector` 跑通一个最小可

gitblog_00548的博客 957

微软登录OAuth 2.0授权流程

OAuth 2.0是一个关于授权的开放网络标准,它允许第三方应用获取用户数据,是目前最流行的授权机制。微软身份平台支持OAuth 2.0授权码流程,使得客户端应用程序能够获得对受保护资源(如网络API)的授权访问。这一流程在保障用户数据安全的前提下,实现了应用的便捷登录与数据共享。当用户在一个支持OAuth 2.0的应用上,希望使用微软账号进行登录时,OAuth 2.0授权流程即被触发。

qq_36569837的博客 4083

Node.js Inspector调试原理:从Chrome DevTools到Node.js的完整链路

Node.js Inspector是一个强大的调试工具,不仅能调试Node.js代码,还能实时收集进程的内存、CPU等数据,支持静态和动态开启,是开发者诊断和调试Node.js应用的必备工具。本文将从使用方法到实现原理,全面解析Node.js Inspector的完整链路。 ## 一、Node.js Inspector快速上手:3种调试方式 ### 1.1 本地调试:一行命令开启调试模式 使用

gitblog_01021的博客 693

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1193

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

如何用Node Inspector调试远程机器:--no-inject远程调试完整实战教程

Node Inspector 是一款基于 Blink Developer Tools(Chrome 开发者工具内核)的 Node.js 调试器,提供断点、单步执行、变量检查等完整调试能力。本文完整实战讲解远程调试:如何用 `--no-inject`、`--debug-host` 与 `?host=` 参数,让你在自己电脑上的浏览器,随时断点调试远程机器上正在运行的 Node.js 进程。 ##

gitblog_00024的博客 882

ArcGIS基于DEM提取微流域单元(附练习数据下载)

流域作为一个相对独立的地理单元,与行政区的划分有着本质上的区别。流域的划分更注重自然因素,流域作为一个综合的自然整体,在其内部形成了一个天然的物质与能量流动的场所,并通过水流的作用,与周围的区域进行物质和能量的交换。流域的精确划分作为一个研究的基础工作,那么接下来给大家说一下利用DEM提取小流域的案例教程——以贵州省遵义市正安县为例。 1 数据获取 地理空间数据云(http://www.gscloud.cn/),数据分辨率为30m。也可直接点击这篇直接下载→全国30m90mDEM下载。 若想要获得更高精度.

qq_43173805的博客 4834

V8 如何进行内存监控和调试

V8 提供了一些工具和接口,用于内存监控和调试。通过使用这些工具和接口,开发者可以更好地理解 JavaScript 引擎的内存使用情况,并找到和修复内存问题。希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言讨论。

你若盛开,清风自来 1185

紫光展锐面试——FPGA/IC设计面试面经案例总结

自我介绍;研究生的主要研究方向是什么?为什么想要应聘数字芯片相关的工作?简单介绍下数字IC设计流程。逻辑综合主要做什么?你有实际做过逻辑综合工作吗?你了解SS corner和FF corner吗?综合时应该使用哪个corner?综合时需要考虑hold吗?为什么?提高时钟频率对setup和hold有什么影响?为什么?hvt、rvt/svt、lvt有什么区别?c40、c50是指什么概念?有什么区别?你对EDA工具有过了解吗?

FPGA/MATLAB学习教程/源码/项目合作开发 1561

【图像超分】论文复现:轻量化超分 | 残差特征蒸馏网络RFDN的Pytorch源码复现,跑通源码,整合到EDSR-PyTorch中进行训练,补充CCA的实现!

本文介绍了将RFDN(残差特征蒸馏网络)整合到EDSR-PyTorch框架中的实现过程。主要内容包括:1)环境配置与数据集准备;2)测试源码提供的x4预训练模型,并通过修改图像裁剪函数解决HR与SR尺寸不一致问题;3)训练过程详解,包括将RFDN源码模块整合到EDSR框架中,调整模型参数输入方式。文章还提供了完整的代码实现、训练好的模型权重下载链接,并对RFDN架构进行了详细拆解与注释。通过将RFDN与EDSR相结合,实现了轻量级图像超分辨率重建,获得了PSNR/SSIM等指标及可视化结果。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 432

从V8到Chrome:揭秘Node.js调试协议的无缝桥接技术

调试Node.js应用时,你是否曾好奇Chrome开发者工具(Chrome DevTools)如何与V8引擎通信?为什么同样的断点调试功能在浏览器和Node环境中能保持一致体验?本文将深入解析**V8 Inspector Protocol**与**Chrome DevTools Protocol**的协同机制,以及node-inspector如何构建这座跨环境调试的技术桥梁。 ## 调试协议的双...

gitblog_00648的博客 505

Serial RapidIO Gen2 IP 说明(一)

概述 高速IO(RapidIO)互联架构,用来兼容当前最流行的集成通信处理器、主处理器、联网的数字信号处理器,是一种高性能、分组交换(报文交换)的互联技术。它解决了高性能嵌入式产业稳定性、高带宽以及系统内部更快的总线速率的需求。 高速IO(RapidIO)标准由三层定义:逻辑层、传输层、物理层。逻辑层定义了所有的协议内容和报文格式。这些是终端发起和完成一次传输所必需的信息。传输层提供了报文从一个端点传输到另外一个端点必要的路线信息。物理层则描述了设备级的端口声明,如报...

记录所学,分享知识,结识挚友 1497
上一篇: 谷歌 I/O 大会亮点解析——从移动时代迈向 AI 时代
下一篇: async/await 带你逃离回调地狱
codebay118
博客等级 码龄10年 43粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值