繁体   English   中英

如何打印 V8 解释器机器码?

[英]How can I print V8 interpreter machine code?

假设我有一个函数和一个函数调用,如下所示:

function foo(i, j) {
  return i + j;
}

foo(1, 2);

目前,我可以使用如下标志“--print-bytecode”打印解释器生成的字节码。

$v8/out/x64.release/d8 --print-bytecode foo.js

我对在 CPU 级别打印出的机器代码真正感兴趣的东西(我不确定这是否适用于解释器级别,所以如果不是,请告诉我。)我可以获得指令指针信息进行某种源级调试和寄存器信息。

另外,我在某处读到我可以使用 d8(不是 JIT gdb)激活像 gdb 这样的调试器,我不确定如何激活它。 有没有人对以上两个问题有什么建议?

先感谢您。

V8 开发人员在这里。 我不完全确定我是否正确理解您的要求,但我认为答案是“这是不可能的”。 解释器不是编译器,因此按照设计,它不会为您的函数生成机器代码,只会生成字节码。 字节码由所谓的“字节码处理程序”“执行”/解释,但那些不是特定于函数的:相同的字节码总是由相同的处理程序处理,它是 V8 二进制文件的一部分。 您可以打印每个处理程序的机器指令,但这对任何“源级调试”都没有帮助。

也就是说,我不确定您所说的“源代码级调试”是什么意思。 如果你想调试 JavaScript 程序,我的建议是使用 Chrome DevTools(或其他浏览器的等效工具)。 调试 V8 确实是为了发现V8 中的错误; 使用低级 V8 洞察来检查 JavaScript 变量或设置 JavaScript 断点等在理论上是可能的,但比使用浏览器的 DevTools 困难几个数量级——我从未这样做过,并且建议不要尝试,因为它是不是适合这项工作的工具。

使用 d8 激活像 gdb 这样的调试器

就像您在 GDB 中运行任何其他程序一样: gdb -args out/x64.debug/d8 foo.js ,但请参见上文:对于 JavaScript 调试,这不会有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM