有没有办法查看任何 JavaScript jit,尤其是 V8 生成的代码的汇编代码?

hip*_*ail 4 javascript assembly jit v8 javascript-engine

主要JavaScript的网络浏览器和发动机nodeJSjust-in-time编译器多年。

我刚刚在Compiler Explorer上观看了一个视频,该视频显示了各种 CPU 的许多编译器输出的汇编代码。

这提醒我,我一直对 JS 引擎的 jits 生成的代码感到好奇。

这些引擎中的任何一个有办法让我们看到低级生成的代码吗?

(如果这在 SO 上不合适,请随时将其迁移到正确的 SE 站点。)

jmr*_*mrk 5

对于 V8,有一个 flag --print-opt-code,它为每个优化的函数打印生成的优化汇编代码。请注意,函数仅在“热”时才会优化,而不是立即优化,因此对于简短的“hello, world”样式程序,标志不会打印任何内容。您可以通过多次调用函数来使函数“热”。

在旧版本中,--print-code未优化代码有一个标志,但由于基线(非优化)编译器已被解释器取代,因此不再有未优化代码。您可以打印生成的字节码--print-bytecode

如果您使用的是 Chrome,您可以通过将标志包装在 --js-flags 中来指定要传递给 V8 的标志,例如--js-flags="--print-opt-code".