1

我正在使用 v8 库在 C++ 项目中运行 JavaScript 代码。我想在运行时记录每条字节码指令。有没有可能?还是我只能记录组装说明?如果我可以,那怎么办?需要跟踪日志,而不是反汇编字节码的结果。

4

2 回答 2

1

如果您使用的是 d8 shell,您可以传递 flag --print-bytecode

如果要嵌入 v8,则可以i::FLAG_print_bytecode = true在创建隔离之前进行设置。您可以查看test-api.cc以获取更多使用 API 的示例。

于 2018-04-18T12:48:23.080 回答
1

如果您使用V8_TRACE_IGNITION定义的符号构建(通过放入v8_enable_trace_ignition = true您的args.gn),则可以使用标志--trace-ignition

请注意,V8 会在一段时间后优化热函数,此时它们将不再在解释器中运行,因此将不再被跟踪。--noopt出于您的目的,您可以使用;将其关闭。当然,这样做会显着降低计算密集型程序的性能(慢 10 倍不会出乎意料;确切的数字很大程度上取决于代码在做什么)。

另外,请注意,计算字节码指令将是程序复杂性的一个非常粗略的近似值。例如,单个字节码可以调用执行任意昂贵操作的内置函数。

于 2018-04-19T17:09:55.330 回答