我一直在学习更多关于V8内部机制的知识,我一直在努力建立一个调试环境来帮助我,但我对所有这些都是相对较新的,所以我不确定我做得是否正确。
我已经使用debug标志设置为true编译了V8,并运行了D8来测试构建。在将WinDbg附加到D8进程之后,我在Math.hypot (v8!Builtins_MathHypot)函数上设置了一个断点,以尝试查看它是如何工作的:

我的问题是:调用堆栈中大多数函数的源代码都是链接的,我可以通过浏览程序集或源代码来调试它们(您还可以在函数旁边的调用堆栈中看到源代码的路径)。但是对于v8!Builtins_*,没有显示源代码。我是不是做错了什么,还是故意的?有没有办法让源代码视图也适用于这些函数?
发布于 2019-06-04 20:41:30
这里是V8开发人员。有不同种类的内置:其中一些是手写汇编,或者是在编译时使用"CodeStubAssembler“基础设施生成的;另一些是用C++实现的。对于后者,您应该能够看到源代码。MathHypot就是其中之一,所以我不知道为什么它不能工作(我不使用WinDbg)。可能是因为函数条目是从宏生成的;请尝试将断点设置为一行实际的C++源代码,在本例中为builtins-math.cc:18。
对于JSEntry、JSEntryTrampoline和InterpreterEntryTrampoline,预计没有源码。
您可以在src/builtins/builtins-definitions.h中看到内置的列表,包括它们的类型。
https://stackoverflow.com/questions/56443262
复制相似问题