优雅地获取v8引擎二进制包
2020-07-28 本文已影响0人
萧哈哈
起因:
为了研究下v8是怎么处理js代码的,于是跟着v8博客去编译v8源码。
受限于网络环境(科学上网也没安装成功),始终安装不成功。
偶然在一篇博客中发现了个开源项目 jsvu。亲试过后,发现在极短的时间内就可以安装好v8和v8-debug,简直是节约生命。不仅如此,它还可以用来安装其他JS引擎
人生苦短, 我用 jsvu (手动狗头)。
话不多说, 正题。
- 确保你的 node >= 10
npm install jsvu -g
- 将
~/.jsvu
加入到环境变量
export PATH="${HOME}/.jsvu:${PATH}"
- 运行
jsvu
$: jsvu
然后按照交互提示安装就好了。 只看v8相关的话, 就把 v8
和 v8-debug
勾选安装就好了。
上个v8针对本地一小段代码生成字节码的demo:
// demo.js
'use strict';
var foo = "demo";
➜ Lab v8-debug --print-bytecode ./demo.js
[generated bytecode for function: (0x16030829204d <SharedFunctionInfo>)]
Parameter count 1
Register count 3
Frame size 24
0x1603082920e6 @ 0 : 12 00 LdaConstant [0]
0x1603082920e8 @ 2 : 26 fa Star r1
0x1603082920ea @ 4 : 27 fe f9 Mov <closure>, r2
0x1603082920ed @ 7 : 61 3b 01 fa 02 CallRuntime [DeclareGlobals], r1-r2
0x1603082920f2 @ 12 : 12 01 LdaConstant [1]
0x1603082920f4 @ 14 : 26 fb Star r0
0x1603082920f6 @ 16 : 12 02 LdaConstant [2]
0x1603082920f8 @ 18 : 15 03 00 StaGlobal [3], [0]
0x1603082920fb @ 21 : 25 fb Ldar r0
0x1603082920fd @ 23 : aa Return
Constant pool (size = 4)
0x1603082920ad: [FixedArray] in OldSpace
- map: 0x1603080424ad <Map>
- length: 4
0: 0x160308292099 <FixedArray[1]>
1: 0x160308292009 <String[10]: #use strict>
2: 0x160308292031 <String[4]: #demo>
3: 0x160308292021 <String[3]: #foo>
Handler Table (size = 0)
Source Position Table (size = 0)
相关资料: