11

我已经使用 Firebug 通过 JavaScript 调试了一百多次,而不必担心那里发生了什么。我想知道 Firebug 究竟是如何处理 JavaScript/DOM 调试的。

假设我在方法内的某些语句上设置断点并开始调试。我想知道里面发生了什么?

4

2 回答 2

8

当您单击某行设置断点时,Firebug 会记录文件 URL 和行号,以防您重新加载页面。然后它在其内部数据结构中查找 URL/行,以决定您想要断点的 Javascript 函数(在 Mozilla 中称为“脚本”)。接下来,它调用 Mozilla 平台函数将行号映射到相对于函数开始的程序计数器。最后它调用平台在程序计数器上设置断点。

当您激活脚本面板时,Firebug 向平台注册了回调。其中之一,onBreak,处理断点。当平台运行 JS 代码时,它会检查其内部结构以查看当前程序计数器是否设置了断点。如果是这样,它会停止 JS 执行并回调 firebug。

Firebug 然后查看断点以确定这是否是条件断点,是否有正确的数据来支持此断点处的调试器 UI,等等。如果条件正常,则通知平台暂停调试、网页的 Javascript 执行和网页的平台事件。然后它显示断点的源文件并突出显示该行。如果条件不好,它只会继续。

当平台不支持正确的行号到程序计数器映射时,就会出现复杂的部分。例如,Firebug 有很多代码来处理 eval() 和浏览器生成的事件处理程序。

在我看来,像这样的问题在 Firebug 新闻组上更好。

于 2010-08-10T14:47:32.877 回答
2

Firebug 正在使用jsdIDebuggerService,它是一个调试器服务。

此页面包含有关firebug 内部结构的信息以及指向源代码的链接。它没有准确地指定所有细节,但它应该作为一个起点。

于 2010-08-10T13:52:18.563 回答