首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在V8中调试javascript实现

如何在V8中调试javascript实现
EN

Stack Overflow用户
提问于 2017-09-01 08:50:28
回答 2查看 347关注 0票数 2

我现在正在学习v8,但我遇到了一些问题。如果我想调试一个方法的C++实现,如何在内存中设置一个断点一个方法的起始地址。例如,var a= new Array(0,1); a.indexOf(1) ;我想在slice的开头设置一个断点,或者有其他方法来跟踪汇编程序代码吗?

有许多函数将被编译并写入一个名为snapshot.bin的文件中。所以我不能在这些函数的开头设置断点。

EN

回答 2

Stack Overflow用户

发布于 2017-09-01 14:30:08

您需要检查源代码并找到slice的实现。然后在该.cc文件中设置gdb/lldb断点:byiltins-typedarray.cc

许多函数被定义为内置函数或运行时函数。

票数 0
EN

Stack Overflow用户

发布于 2017-09-02 07:37:49

这取决于您想要检查的函数的类型。

您可以在不使用快照的情况下进行编译,以避免与快照相关的调试困难(代价是使启动变得更慢:在Debug模式下运行几秒钟)。

您可以修改相应的代码生成器,以便在函数开始时发出break指令。以Array.indexOf为例,这可能是最简单的解决方案;CodeStubAssembler指令称为DebugBreak()

您可以使用GDB在其他地方中断,找到相关函数的方法(例如,通过isolate->builtins),并在其条目的地址上设置断点。(这需要一些V8知识和/或代码阅读技能,但这并不困难。)

您可以使用各种--print-*-code标志将代码打印到标准输出(而不会中断它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45991936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档