我一直想了解有关V8内部的更多信息,我已经厌倦了设置调试环境来帮助我解决这个问题,但是我对所有这些都还比较陌生,所以我不确定自己是否做对了
我已将V8的调试标志设置为true,并运行D8来测试构建。将WinDbg附加到D8进程后,我在Math.hypot(v8!Builtins_MathHypot)函数上设置了一个断点,以尝试查看其工作原理:
我的问题是:调用堆栈中大多数功能的源代码都已链接,我可以通过浏览汇编或源代码来调试它们(您也可以在接下来的调用堆栈中查看源代码的路径功能)。但是对于v8!Builtins_ *,没有显示源代码。我是在做错事还是故意的?有没有办法使这些功能也能使用源代码视图?
答案 0 :(得分:1)
V8开发人员在这里。有多种内建函数:其中一些是手写汇编,或使用“ CodeStubAssembler”基础结构在编译时生成;其他的则用C ++实现。对于后者,您应该能够看到源。 MathHypot就在其中,所以我不知道为什么它不起作用(我不使用WinDbg)。可能是因为函数条目是从宏生成的;尝试将断点设置为实际的C ++源代码行,在这种情况下为buildins-math.cc:18。
对于JSEntry,JSEntryTrampoline和InterpreterEntryTrampoline,预计没有源。
您可以在src/builtins/builtins-definitions.h中查看内置的列表,包括其类型。