我编译了v8_hello_world示例,它可以在控制台中打印“hello world”。我知道V8用JIT编译JavaScript,但是我想打印详细的消息,比如它编译的指令。而且我也想知道这些指令的类型,所以我该怎么办?
非常感谢〜
答案 0 :(得分:1)
根据您感兴趣的生成代码的类型,您必须将相应的标志传递给V8:
--print-code
打印未经优化的机器代码(由“完全代码生成”,未优化的编译器创建)--print-bytecode
打印字节码(由“Ignition”解释器创建)--print-opt-code
打印优化的机器代码(由“Crankshaft”或“TurboFan”优化编译器创建)这些标志(以及许多其他标志)由--help
记录。由于执行管道的主要更改目前正在进行,根据您使用的V8版本,您可能会看到由不同编译器编译的相同功能。
如果使用开发人员shell d8
,则可以直接在命令行上传递这些标志。在您自己的嵌入式应用程序中,您可以使用v8::V8::SetFlagsFromCommandLine
将argc
和argv
传递给V8。在d8.cc
中,您可以看到一个示例,了解如何自行处理某些标记并将其他标记传递给V8。
一年后更新:“完全代码”和“Crankshaft”消失了。 --print-bytecode
仍打印字节码,--print-opt-code
打印优化的机器代码(现在始终来自“Turbofan”)。 --print-code
比以前做得少,但对生成的正则表达式代码和wasm代码仍然有用。