V8引擎如何打印编译后的指令?
How to print the compiled instructions in V8 engine?
我已经编译了 v8_hello_world 示例,它可以在控制台中打印 "hello world"。我知道 V8 使用 JIT 编译 JavaScript,但我想打印详细信息,例如它编译的指令。而我也想知道这些指令的类型,那怎么办呢?
非常感谢~
根据您感兴趣的生成代码的类型,您必须将相应的标志传递给 V8:
--print-code
打印未优化的机器代码(由未优化的编译器 [=39= 创建)
--print-bytecode
打印字节码(由 "Ignition" 解释器创建)
--print-opt-code
打印优化的机器代码(由 "Crankshaft" 或 "TurboFan" 优化编译器创建)
--help
记录了这些标志(以及许多其他标志)。由于目前正在对执行管道进行重大更改,具体取决于您使用的 V8 版本,您可能会看到由不同编译器编译的相同函数。
如果您使用开发人员 shell d8
,您可以直接在命令行上传递这些标志。在您自己的嵌入应用程序中,您可以使用 v8::V8::SetFlagsFromCommandLine
将 argc
和 argv
传递给 V8。在 d8.cc
中,您可以看到有关如何自己处理一些标志并将其他标志传递给 V8 的示例。
一年后更新:"full codegen"和"Crankshaft"不见了。 --print-bytecode
仍然打印字节码,--print-opt-code
打印优化的机器代码(现在总是来自 "Turbofan")。 --print-code
比以前做的少了,但对于生成正则表达式代码和 wasm 代码仍然有用。
我已经编译了 v8_hello_world 示例,它可以在控制台中打印 "hello world"。我知道 V8 使用 JIT 编译 JavaScript,但我想打印详细信息,例如它编译的指令。而我也想知道这些指令的类型,那怎么办呢?
非常感谢~
根据您感兴趣的生成代码的类型,您必须将相应的标志传递给 V8:
--print-code
打印未优化的机器代码(由未优化的编译器 [=39= 创建)--print-bytecode
打印字节码(由 "Ignition" 解释器创建)--print-opt-code
打印优化的机器代码(由 "Crankshaft" 或 "TurboFan" 优化编译器创建)
--help
记录了这些标志(以及许多其他标志)。由于目前正在对执行管道进行重大更改,具体取决于您使用的 V8 版本,您可能会看到由不同编译器编译的相同函数。
如果您使用开发人员 shell d8
,您可以直接在命令行上传递这些标志。在您自己的嵌入应用程序中,您可以使用 v8::V8::SetFlagsFromCommandLine
将 argc
和 argv
传递给 V8。在 d8.cc
中,您可以看到有关如何自己处理一些标志并将其他标志传递给 V8 的示例。
一年后更新:"full codegen"和"Crankshaft"不见了。 --print-bytecode
仍然打印字节码,--print-opt-code
打印优化的机器代码(现在总是来自 "Turbofan")。 --print-code
比以前做的少了,但对于生成正则表达式代码和 wasm 代码仍然有用。