我在网址中尝试过建议: 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文本)。
感谢。
答案 0 :(得分:2)
对于当前的V8版本(5.9或更高版本),您可能需要--print-opt-code
标志:最初,V8为其解释器生成字节代码(您可以使用--print-bytecode
进行检查);一旦一个函数“热”(即花费大量时间执行它),它就会被发送到优化编译器为它生成机器代码。
请注意,您不能将V8用作通用的JavaScript到机器代码编译器。上面提到的标志用于调试;没有(支持或简单)方法从输出中生成工作二进制文件。