2

在使用 v8 JavaScript 引擎时,我这样做:

script->Run();

但我想做这样的事情:

while (!script->Finished()) {
   script->NextOperation();
   printf("current line: %i\n", script->line);
}

我问这个是因为我想更好地理解 v8。我知道它是 JIT 编译的,它具有侦听某个端口的调试器接口。我没有通过检查标题找到我的问题的答案,更不用说谷歌提供的极简文档了。

4

1 回答 1

0

您未能找到答案的具体问题是什么?

应该怎么script->NextOperation()做?

V8 本身不是 JIT 编译的;它 JIT 编译它执行的 JavaScript 代码。逐行跟踪 JS 脚本如何更好地理解 V8?

我想到了两种现有的方法:

  • 如果你想跟踪 JavaScript 的执行,V8 有一个内置的--trace标志,它会stdout在函数进入或退出时打印一行。
  • 如果您想跟踪 C++ 方面以了解 V8 在底层做了什么,请使用您最喜欢的 C++ 调试器。(请注意,这将是一种非常耗时的方法,因为 V8 很大并且可以做很多事情。在您的调查中更加专注可能会有所帮助,例如“解析器是如何工作的”或“什么垃圾收集器会做吗”。还有各种设计文档和博客文章四处飘荡,这可能是理解许多概念的更快方法,而不是挖掘源代码或跟踪执行。)
于 2017-05-06T11:09:33.047 回答