如何在V8引擎中打印已编译的指令?

时间:2017-03-19 08:21:32

标签: v8 chromium

我编译了v8_hello_world示例,它可以在控制台中打印“hello world”。我知道V8用JIT编译JavaScript,但是我想打印详细的消息,比如它编译的指令。而且我也想知道这些指令的类型,所以我该怎么办?

非常感谢〜

1 个答案:

答案 0 :(得分:1)

根据您感兴趣的生成代码的类型,您必须将相应的标志传递给V8:

  • --print-code打印未经优化的机器代码(由“完全代码生成”,未优化的编译器创建)
  • --print-bytecode打印字节码(由“Ignition”解释器创建)
  • --print-opt-code打印优化的机器代码(由“Crankshaft”或“TurboFan”优化编译器创建)

这些标志(以及许多其他标志)由--help记录。由于执行管道的主要更改目前正在进行,根据您使用的V8版本,您可能会看到由不同编译器编译的相同功能。

如果使用开发人员shell d8,则可以直接在命令行上传递这些标志。在您自己的嵌入式应用程序中,您可以使用v8::V8::SetFlagsFromCommandLineargcargv传递给V8。在d8.cc中,您可以看到一个示例,了解如何自行处理某些标记并将其他标记传递给V8。

一年后更新:“完全代码”和“Crankshaft”消失了。 --print-bytecode仍打印字节码,--print-opt-code打印优化的机器代码(现在始终来自“Turbofan”)。 --print-code比以前做得少,但对生成的正则表达式代码和wasm代码仍然有用。