【发布时间】:2025-12-30 15:20:20
【问题描述】:
我正在使用 v8 库在 C++ 项目中运行 JavaScript 代码。我想在运行时记录每条字节码指令。 有没有可能?还是我只能记录组装说明?如果我可以,那怎么办? 跟踪日志是必需的,不是反汇编字节码的结果。
【问题讨论】:
标签: node.js v8 embedded-v8 libv8
我正在使用 v8 库在 C++ 项目中运行 JavaScript 代码。我想在运行时记录每条字节码指令。 有没有可能?还是我只能记录组装说明?如果我可以,那怎么办? 跟踪日志是必需的,不是反汇编字节码的结果。
【问题讨论】:
标签: node.js v8 embedded-v8 libv8
如果您使用定义的V8_TRACE_IGNITION 符号进行构建(通过将v8_enable_trace_ignition = true 放入您的args.gn),则可以使用标志--trace-ignition。
请注意,V8 会在一段时间后优化热函数,此时它们将不再在解释器中运行,因此将不再被跟踪。出于您的目的,您可以使用--noopt 将其关闭;当然,这样做会显着降低计算密集型程序的性能(慢 10 倍不会出乎意料;确切的数字很大程度上取决于代码在做什么)。
另外,请注意,计数字节码指令将是程序复杂性的一个非常粗略的近似值。例如,单个字节码可以调用执行任意昂贵操作的内置函数。
【讨论】:
如果您使用的是 d8 shell,您可以传递标志 --print-bytecode。
如果您要嵌入 v8,您可以在创建隔离之前设置 i::FLAG_print_bytecode = true。您可以查看test-api.cc 了解更多使用 API 的示例。
【讨论】: