优雅地获取v8引擎二进制包

2020-07-28  本文已影响0人  萧哈哈

起因:

为了研究下v8是怎么处理js代码的,于是跟着v8博客去编译v8源码。
受限于网络环境(科学上网也没安装成功),始终安装不成功。
偶然在一篇博客中发现了个开源项目 jsvu。亲试过后,发现在极短的时间内就可以安装好v8和v8-debug,简直是节约生命。不仅如此,它还可以用来安装其他JS引擎

人生苦短, 我用 jsvu (手动狗头)。

话不多说, 正题。

  1. 确保你的 node >= 10
npm install jsvu -g
  1. ~/.jsvu 加入到环境变量

export PATH="${HOME}/.jsvu:${PATH}"

  1. 运行 jsvu

$: jsvu

然后按照交互提示安装就好了。 只看v8相关的话, 就把 v8v8-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)


相关资料:

上一篇 下一篇

猜你喜欢

热点阅读