首页 > 解决方案 > 如何使用 WinDbg 使用源代码视图调试 V8?

问题描述

我正在研究更多关于 V8 内部的知识,我已经厌倦了建立一个调试环境来帮助我,但我对这一切都比较陌生,所以我不确定我是否做得对。

我已经编译了 V8,并将调试标志设置为 true,并运行 D8 来测试构建。将 WinDbg 附加到 D8 进程后,我在 Math.hypot (v8!Builtins_MathHypot) 函数上设置了一个断点,以尝试查看它是如何工作的:

在此处输入图像描述

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

标签: v8

解决方案


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

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

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


推荐阅读