我使用v8库在C ++中运行JavaScript代码 - 项目。我想在运行时记录每个字节码指令。 有可能吗?或者我只能记录装配说明吗?如果我能,那怎么样? 跟踪日志是必需的,而不是反汇编字节码的结果。
答案 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倍速度不会出乎意料;确切的数量很大程度上取决于代码的作用)。
另外,请注意,计算字节码指令将是程序复杂性的非常粗略的近似值。例如,单个字节码可以调用内置操作来执行任意昂贵的操作。