如何在V8中调试javascript实现

如何在V8中调试javascript实现,javascript,debugging,v8,Javascript,Debugging,V8,我现在正在学习v8,但遇到了一些问题。 如果我想调试一个方法的C++实现,如何在内存中设置断点方法的起始地址。 e、 g.var a=新数组(0,1);a、 指数f(1)我想在片的开头设置一个断点,或者有其他方法来跟踪汇编代码吗 有许多函数将被编译并写入名为snapshot.bin的文件中。因此,我无法在这些函数的开头设置断点。您需要检查源代码并找到切片的实现。然后在该.cc文件中设置gdb/lldb断点: 许多函数被定义为内置函数或运行时函数 这取决于要检查的功能类型 您可以在不使用快照的情况

我现在正在学习v8,但遇到了一些问题。 如果我想调试一个方法的C++实现,如何在内存中设置断点方法的起始地址。 e、 g.
var a=新数组(0,1);a、 指数f(1)我想在片的开头设置一个断点,或者有其他方法来跟踪汇编代码吗


有许多函数将被编译并写入名为snapshot.bin的文件中。因此,我无法在这些函数的开头设置断点。

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


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

这取决于要检查的功能类型

您可以在不使用快照的情况下进行编译,以避免与快照相关的调试困难(代价是使启动速度大大降低:在调试模式下需要几秒钟)

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

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


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

我很抱歉写了一个错误的示例/我很抱歉写了一个错误的示例。有许多函数将被编译并写入名为snapshot.bin的文件中。所以我不能在这些函数的开头设置断点。在CSA函数中添加DebugBreak时总是失败。失败:gen/embedded.cc snapshot\u blob.bin G:/depot\u tools/win\u tools-2\u 7\u 6\u bin/python/bin/python.exe../。/tools/run.py./mksnapshot--turbo\u指令调度--embedded\u src gen/embedded.cc--embedded\u变量默认--随机种子314159265--启动\u blob snapshot\u blob.bin,DebugBreak将发出中断指令(“x86上的int3”)。您必须在调试器中运行二进制文件(在本例中为mksnapshot),以便在中断指令时停止并恢复。或者,如果您发现更容易调试d8二进制文件,则可以不使用快照进行编译。