window 系统里怎么使用 jsvu 工具快速调试 v8?

简介: window 系统里怎么使用 jsvu 工具快速调试 v8?

jsvu 是什么?


   jsvu is the JavaScript (engine) Version Updater. jsvu makes it easy to install recent versions of various JavaScript engines without having to compile them from source.


jsvu 是 JavaScript(引擎)版本更新器。 jsvu 可以轻松安装各种 JavaScript 引擎的最新版本,而无需从源代码编译它们。


支持多种操作系统和多种 JavaScript 引擎,目前为止支持的操作系统和引擎如下:

image.png


安装 jsvu


我们全局安装 jsvu

npm i jsvu -g

07d215fc62724ae59b541ffe04eed99c.png



执行 jsvu

首次运行时,jsvu 会提示输入操作系统和架构,以及希望通过 jsvu 管理的 JavaScript 引擎列表。 然后它会下载并安装选择的每个引擎的最新版本。选择完之后,jsvu 会记住这次选择,下次再执行时还是会引用上一次的配置,我这里根据我的需求用了下面的配置。


jsvu --os=win64 --engines=v8,v8-debug


f21e2c0afb804313aca4c1f0f7dedbe1.png


d19b7a777b8f4691bf1b7ee17ad77c31.png



查看 jsvu 帮助信息

我们可以通过下面命令去查看帮助信息, --os,以及--engines

jsvu -h


87269c31124f439889aeb4be797d8cf4.png


生成 v8,v8-debug 帮助信息

安装好 v8,v8-debug 之后,我们进入到 C:\Users\guok\.jsvu 目录下,能看到安装好的 cmd 文件。



fd6811da1c4941ea8f5627a0f49c83d1.png




我们 shift + 右击 打开 powershell,输入下面命令,就会生成一个 v8-help.txt 的文本空文件。

# Linux 里面就是 touch v8-help.txt
ni v8-help.txt


57e504d78a8249b0b01dc54b1830a4e7.png


我们接下来把 v8 帮助信息放进去,我们打开 cmd,执行下面命令:

v8 --help >> v8-help.txt


974d850c47514806802b25c9a2445d8e.png


执行完之后,我们发现 v8 的帮助信息存到了 v8-help.txt 记事本里


006f8886bbb24dcca3f046d9c6fb2c78.png


同样的道理:我们将 v8-debug 的帮助信息也弄成一个 txt 文本

ni v8-debug-help.txt


923043b7b70c471897c7ba439d57161b.png


v8-debug --help >> v8-debug-help.txt


85f640ef81b34c709fb53558733b74c1.png


执行完之后,就会生成帮助信息的 v8-debug-help.txt 文本文件


7954e947816840bcb49932dec64f1576.png



执行 v8,v8-debug


1、直接执行代码

# 可去帮助信息文件里查看命令的作用
-e   execute a string in V8(在 V8 中执行字符串)


我们打开 cmd,然后输入下面代码,发现可以执行出结果

v8 -e "console.log('kaimo666' + Date.now())"


96bbc75c3534400d96ab33300331789b.png


2、直接执行 JavaScript 文件


我们在里面新建一个 kaimo.js 的文件,里面输入代码

console.log('kaimo666' + Date.now())


b64596cb17624bc89c009d025b45556c.png


下面我们执行之这个文件

62f77d7fecdd44149159a1cda43fdbdc.png


输入命令,发现也可以执行出来

v8 kaimo.js



d716ca993d744a6d9c4a725e1d87d30f.png


注意这里的后缀记得写,不然会读取错误。

e601487ea82641afa2b7bcf5d26ffd69.png




跟踪代码执行


1、查看 AST

查看 ast 我们需要用到命令 --print-ast


22e592836455469191cdb5823f24c677.png



v8-debug -e --print-ast "var kaimo = 313"



d4b821cd26184c1d8250252b74cecd8e.png


2、查看作用域

查看作用域需要用到 --print-scopes 这个命令


05ce04ec5711476fa1a465f7a7667397.png



我们在 kaimo.js 里使用新的代码

var k = 313
function kaimo(){
    console.log('kaimo777')
}


然后执行下面的命令查看作用域

v8-debug --print-scopes kaimo.js


执行结果如下:可以看到变量在全局作用域里

6bb549de38cd434a867ca10b17a6f744.png



Inner function scope:
function kaimo () { // (000001F4CAE9B970) (30, 66)
  // NormalFunction
  // 2 heap slots
}
Global scope:
global { // (000001F4CAE9B6C0) (0, 66)
  // will be compiled
  // NormalFunction
  // 1 stack slots
  // temporary vars:
  TEMPORARY .result;  // (000001F4CAE9BBD0) local[0]
  // local vars:
  VAR kaimo;  // (000001F4CAE9BB40)
  VAR k;  // (000001F4CAE9B8E0)
  function kaimo () { // (000001F4CAE9B970) (30, 66)
    // lazily parsed
    // NormalFunction
    // 2 heap slots
  }
}



3、查看生成的字节码

查看生成的字节码需要用到 --print-bytecode(打印解释器生成的字节码)

19e7f2776e5041f5a02729cc1e649bc7.png


v8-debug -e --print-bytecode "var kaimo = 666"


执行结果如下:

b769ab4c0c37477d909da17af35fa7c6.png


[generated bytecode for function:  (0x00c700253595 <SharedFunctionInfo>)]
Bytecode length: 20
Parameter count 1
Register count 3
Frame size 24
Bytecode age: 0
         000000C70025361A @    0 : 13 00             LdaConstant [0]
         000000C70025361C @    2 : c3                Star1
         000000C70025361D @    3 : 19 fe f8          Mov <closure>, r2
         000000C700253620 @    6 : 65 59 01 f9 02    CallRuntime [DeclareGlobals], r1-r2
         000000C700253625 @   11 : 00 0d 9a 02       LdaSmi.Wide [666]
         000000C700253629 @   15 : 23 01 00          StaGlobal [1], [0]
         000000C70025362C @   18 : 0e                LdaUndefined
         000000C70025362D @   19 : a9                Return
Constant pool (size = 2)
000000C7002535E9: [FixedArray] in OldSpace
 - map: 0x00c700002239 <Map(FIXED_ARRAY_TYPE)>
 - length: 2
           0: 0x00c7002535dd <FixedArray[1]>
           1: 0x00c700253575 <String[5]: #kaimo>
Handler Table (size = 0)
Source Position Table (size = 0)


4、查看优化与反优化

生成字节码之后,解释器会解释执行这段字节码,如果重复执行了某段代码,监控器就会将其标记为热点代码,并提交给编译器优化执行。

b25ae88ee300415d9b4799cdb70cdee4.png


查看哪些代码被优化,使用命令:

# 跟踪优化编译
v8-debug -e --trace-opt "var kaimo = 666"


查看哪些代码被反优化,使用命令:

# 跟踪去优化
v8-debug -e --trace-deopt "var kaimo = 666"


其它命令可以自己去尝试。

目录
相关文章
|
存储 Cloud Native API
oss云网关配置
配置阿里云OSS与云网关实现灵活数据传输和访问控制。步骤包括开通OSS服务,创建Bucket,获取访问凭证,可选配置CORS和生命周期规则。云网关配置涉及阿里云云原生网关的代理规则设定或使用云存储网关集成OSS访问,具体配置需参照产品文档,因产品更新可能会有变动。
890 1
|
存储 JavaScript 前端开发
Vue3 详细教程及实例(完整版)
Vue3 详细教程及实例(完整版)
1207 0
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
1571 25
|
前端开发 Java 数据库连接
35个项目,开源,开源!
35个项目,开源,开源!
1701 0
35个项目,开源,开源!
|
监控 Java Python
Java 中的正则表达式
正则表达式是Java中强大的文本处理工具,支持灵活的匹配、搜索、替换和验证功能。本文介绍了正则表达式的语法基础及其在Java中的应用,包括字符串匹配、替换、分割及实际场景中的邮箱验证和电话号码提取等示例。通过这些技术,可以显著提高文本处理的效率和准确性。
737 9
|
并行计算 PyTorch 算法框架/工具
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
文章介绍了如何在CUDA 12.1、CUDNN 8.9和PyTorch 2.3.1环境下实现自定义数据集的训练,包括环境配置、预览结果和核心步骤,以及遇到问题的解决方法和参考链接。
1031 4
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
超级好用的笔记工具------Typora 如何修改Typora 中图片保存的位置
这篇文章介绍了Typora笔记工具的使用技巧,包括如何修改图片保存位置,以及一些基本的编辑功能,如标题设置、代码块和主题选择。
超级好用的笔记工具------Typora 如何修改Typora 中图片保存的位置
|
机器学习/深度学习 人工智能 自然语言处理
【AI 初识】神经网络有哪些不同类型?
【5月更文挑战第2天】【AI 初识】神经网络有哪些不同类型?
|
移动开发 JavaScript
简单介绍下阿里云的H5滑动验证+H5示例源码
简单介绍下阿里云的H5滑动验证+H5示例源码
475 0

热门文章

最新文章