作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经尝试过网址中的建议: How can I see the machine code generated by v8?
这是我所做的:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools
sudo apt-get install libv8-dev
sudo apt-get install g++
sudo apt-get install libgtk2.0-dev
sudo apt-get install g++-multilib
export PATH="$PATH":`pwd`/depot_tools
fetch v8
gclient sync
make ia32.release objectprint=on disassembler=on
v8/out/ia32.release/d8 --print-all-code hello.js > output.txt
(脚本就是:print("hello"))
下面是输出:
kind = STUB
major_key = JSEntryStub
compiler = unknown
Instructions (size = 131)
0x35d06040 0 55 push ebp
0x35d06041 1 89e5 mov ebp,esp
0x35d06043 3 6a02 push 0x2
......
0x35d060c2 82 c3 ret
Handler Table (size = 12)
RelocInfo (size = 23)
0x35d06047 external reference (Isolate::context_address) (0xa9533dc)
0x35d06050 external reference (Isolate::c_entry_fp_address) (0xa953410)
......
kind = STUB
major_key = JSEntryStub
compiler = unknown
Instructions (size = 131)
0x35d06120 0 55 push ebb
......
确实,我有一批代码,但它与输入脚本没有什么不同。顺便说一下,对于一个简单的脚本来说,输出确实太多了(大约13M文本)。
谢谢。
最佳答案
对于当前的 V8 版本(5.9 或更高版本),您可能需要 --print-opt-code
标志:最初,V8 为其解释器生成字节代码(您可以使用 --打印字节码
);一旦一个函数“热”(即花费大量时间执行它),它就会被发送到优化编译器为其生成机器代码。
请注意,您不能将 V8 用作通用 JavaScript 到机器代码的编译器。上面提到的标志用于调试;没有(支持的或简单的)方法从其输出生成工作二进制文件。
关于javascript - 如何将 JS 转换为本地机器代码(使用 v8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737071/
我是一名优秀的程序员,十分优秀!