什么是 D8
d8 是一个非常有用的调试工具,你可以把它看成是 debug for V8 的缩写。我们可以使用 d8 来查看 V8 在执行 JavaScript 过程中的各种中间数据,比如作用域、AST、字节码、优化的二进制代码、垃圾回收的状态,还可以使用 d8 提供的私有 API 查看一些内部信息。
下载D8
win64 平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-win64-dbg-8.4.109.zip
mac 平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-mac64-dbg-8.4.109.zip
linux64 平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-dbg-8.4.109.zip
使用D8
解压下载包后,点击运行d8.exe,即可开启d8命令窗口
在d8命令窗口中,我们可以写入JS代码,回车执行
当然我们也可以将d8命令加入系统变量,在任何位置的命令窗口中使用d8命令
d8命令常用配置项
- print-bytecode 查看生成的字节码
- print-opt-code 查看优化后的代码
- print-ast 查看中间生成的 AST
- print-scopes 查看中间生成的作用域
- trace-gc 查看这段代码的内存回收状态
- trace-opt 查看哪些代码被优化了
- trace-deopt 查看哪些代码被反优化了
- turbofan-stats 打印优化编译器的一些统计数据
示例:使用d8命令将JS源码转成字节码
关于d8字节码指令的说明
入门教程
浅析浏览器是如何工作的(一):V8引擎、JIT机制、JS代码解释执行与编译执行 - 古兰精
入门视频
深入V8引擎-第01课:上手开始看 V8 Ignition 解释器的字节码(Bytecodes)_哔哩哔哩_bilibili
[连载] 淦!移植个V8不可能这么难!(PLCT实验室2021春季讨论班)_哔哩哔哩_bilibili
d8字节码指令说明其实就在v8源码文件中,下面是v8源码下载地址
v8/src at lkgr · v8/v8 · GitHub
在v8源码目录下该文件是各种字节码指令的说明
v8-lkgr\src\interpreter\interpreter-generator.cc
由于没有相关中文资料,所以大家有兴趣的话可以结合调试代码和interpreter-generator.cc文件说明,来理解字节码指令含义。
最后是PLCT实验室的github资料库
GitHub - plctlab/v8-internals: 面向编译器开发人员的V8内部实现文档