如何跟踪v8库中的字节码指令

时间:2018-04-18 12:25:16

标签: node.js v8 embedded-v8 libv8

我使用v8库在C ++中运行JavaScript代码 - 项目。我想在运行时记录每个字节码指令。 有可能吗?或者我只能记录装配说明吗?如果我能,那怎么样? 跟踪日志是必需的,而不是反汇编字节码的结果。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您使用V8_TRACE_IGNITION符号进行构建(将v8_enable_trace_ignition = true放入args.gn),则可以使用标记--trace-ignition

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

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