如何使用 WinDbg 调试带有源代码视图的 V8?

How to debug V8 with source code view using WinDbg?

我一直在研究更多关于 V8 内部的知识,我已经厌倦了设置一个调试环境来帮助我解决这个问题,但我对这一切都比较陌生,所以我不确定我是否在做没错。

我编译了 V8 并将调试标志设置为 true 并使用 运行 D8 来测试构建。将 WinDbg 附加到 D8 进程后,我在 Math.hypot (v8!Builtins_MathHypot) 函数上设置断点以尝试查看其工作原理:

我的问题是:调用堆栈中大部分函数的源代码是链接的,我可以通过浏览汇编或源代码来调试它们(您还可以在调用中看到源代码的路径堆栈在函数旁边)。但是对于v8!Builtins_*,没有显示源代码。我做错了什么还是故意的?有没有办法让源代码视图也适用于这些功能?

这里是 V8 开发人员。有不同种类的内置函数:其中一些是手写汇编,或者在编译时使用 "CodeStubAssembler" 基础结构生成;其他的是用 C++ 实现的。对于后者,你应该能够看到来源。 MathHypot 就在其中,所以我不知道为什么它不起作用(我不使用 WinDbg)。也许是因为函数入口是从宏生成的;尝试将断点设置为一行实际的 C++ 源代码,在本例中为 builtins-math.cc:18.

对于JSEntry、JSEntryTrampoline、InterpreterEntryTrampoline,预计没有源码。

您可以在 src/builtins/builtins-definitions.h 中查看内置列表,包括它们的类型。