让你更懂 JavaScript:04 什么是 D8
D8 是一个非常有用的调试工具,你可以把它看成是 debug for V8 的缩写。我们可以使用 d8 来查看 V8 在执行 JavaScript 过程中的各种中间数据,比如作用域、AST、字节码、优化的二进制代码、垃圾回收的状态,还可以使用 d8 提供的私有 API 查看一些内部信息。
V8 源码编译出来的可执行程序名为 d8。d8 作为 V8 引擎在命令行中可以使用的交互 shell 存在。Google 官方已经不记得 d8 这个名字的由来,但是做为 delveloper shell 的缩写,用首字母 d 和 8 结合,恰到好处。还有一种说法是 d8 最初叫 developer shell,因为 d 后面有 8 个字符,因此简写为 d8,类似于 i18n(internationalization) 这样的简写。参考:Using d8
安装 D8
方法一:自行下载编译
- v8 google 下载及编译使用
- 官方文档:Using d8
方法二:使用编译好的 d8 工具 (解压文件,点击 d8 打开(mac 安全策略限制的话,按住 control,再点击,弹出菜单中选择打开)
- mac 平台
- linux32 平台
- linux64 平台
- win32 平台
- win64 平台
方法三:mac
# 如果已有 HomeBrew,忽略第一条命令
ruby -e "\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install v8
方法四:使用 node 代替,比如可以用 node –print-bytecode ./test.js,打印出 Ignition(解释器)生成的 Bytecode(字节码)。
都有哪些 d8 命令可供使用?
1、查看 d8 命令
# 如果不想使用./d8 这种方式进行调试,可将 d8 加入环境变量,之后就可以直接`d8 --help`了
./d8 --help
`2、过滤特定的命令`
# 如果是 Windows 系统,可能缺少 grep 程序,请自行下载安装并添加环境变量
./d8 --help |grep print
如:
- print-bytecode 查看生成的字节码
- print-opt-code 查看优化后的代码
- print-ast 查看中间生成的 AST
- print-scopes 查看中间生成的作用域
- trace-gc 查看这段代码的内存回收状态
- trace-opt 查看哪些代码被优化了
- trace-deopt 查看哪些代码被反优化了
- turbofan-stats 打印优化编译器的一些统计数据
如何使用 d8 进行调试?
下面是一段 js 测试代码:
`// test.js function sum(a) { var b = 6; return a + 6; } console.log(sum(3));`
执行命令:
# d8 后面跟上文件名和要执行的命令,如执行下面这行命令,就会打印出 test.js 文件所生成的字节码。
./d8 ./test.js --print-bytecode
# 执行以下命令,输出 9
./d8 ./test.js
内部方法的使用
还可以使用 V8 所提供的一些内部方法,只需要在启动 V8 时传入 –allow-natives-syntax 命令,你就可以在 test.js 中使用诸如 HasFastProperties(检查一个对象是否拥有快属性)的内部方法 (索引属性、常规属性、快属性等下文会介绍)。
|
|
执行:
./d8 --allow-natives-syntax ./test.js
# 依次打印:true false
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/javascript/%E8%AE%A9%E4%BD%A0%E6%9B%B4%E6%87%82-JavaScript04-%E4%BB%80%E4%B9%88%E6%98%AF-D8/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com