【问题标题】:Debugging js bytecode with V8 engine使用 V8 引擎调试 js 字节码
【发布时间】:2018-09-13 08:49:23
【问题描述】:

我正在使用 v8 库在我的项目中运行 js 代码。我想实现编译后的js代码的受控执行。我希望能够逐步控制字节码的执行。从一个指令到另一个指令。有可能吗?

【问题讨论】:

  • 调试字节码是什么意思,是调试源代码还是实际机器码?
  • 感谢您的回答。是的,也许这个问题没有明确表述。我需要调试点火字节码。我不知道这是否可能。
  • 据我所知,javascript 代码会在运行时(在 v8 引擎内部)转换为 c++。还有一个检查器协议,您可以在与引擎交谈时调试代码。那么,点火字节码是指调试 v8 引擎吗?
  • 没有。本文中的示例medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775。 js 字符串 "let result = 1 + obj.x" 转换为 19 S> 0x2ddf8802cf6f @ LdaSmi [1] 0x2ddf8802cf71 @ Star r0 34 E> 0x2ddf8802cf73 @LdaNamedProperty a0, [0], [4] 28 E> 0x2ddf8802cf77 @ Add r0, [6]
  • 这是关于跟踪字节码的可能性,在示例中给出并在文章中描述。

标签: node.js v8 embedded-v8 libv8


【解决方案1】:

Javascript 是一种解释型语言,而不是一种编译型语言。 V8 是 google 的 javascript 引擎,存在于 chrome 浏览器中。网页通常使用 HTML、Javascript 和 CSS 构建,而 Web 浏览器足以进行 HTML 渲染和 Javascript 解释。您甚至不需要安装 JVM 来呈现包含 Javascript 的页面。

V8 是用 C++ 编写的,你可以调试它,甚至你可以通过 exposig javascript 对象扩展你的 javascript 并扩展现有的 JS 对象(如文档等),在 V8 中实现 C++ 绑定。希望它能让你明白。

如果您使用 JSP 编写服务器站点脚本,那么编译将到位,您将获得包含字节码的 .java 文件,并且 JVM 和 Javac 等其他工具将出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2014-04-04
    • 2021-10-10
    • 2023-03-09
    • 2013-04-21
    相关资源
    最近更新 更多