Firebug内部是如何工作的?

11

我已经用Firebug调试JavaScript超过一百次,不用担心那里发生了什么。

我想知道Firebug如何处理JavaScript/DOM调试。

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


3
它是如何修改网页以便在鼠标悬停在元素上时突出显示它们? - djondal
2个回答

8
当您点击一个行以设置断点时,Firebug会记录文件URL和行号以防您重新加载页面。然后它会在内部数据结构中查找URL/行,以确定要打断点的JavaScript函数(在Mozilla中称为“脚本”)。接下来,它调用Mozilla平台函数将行号映射到相对于函数开头的程序计数器。最后,它调用平台在程序计数器上设置断点。
回到您激活脚本面板的时候,Firebug已经向平台注册了回调函数。其中之一,onBreak,处理断点。随着平台运行JS代码,它检查其内部结构,以查看当前程序计数器是否设置有断点。如果是,则它停止JS执行并回调到Firebug。
然后,Firebug查看断点以确定这是否是条件断点,是否具有正确的数据支持调试器UI在此断点处,等等。如果条件是满足的,它会告诉平台暂停调试、Javascript执行和网页平台事件。然后它显示断点的源文件并突出显示该行。如果条件不好,它就继续。
复杂的部分来自平台不支持正确的行号到程序计数器映射。例如,Firebug有很多处理eval()和浏览器生成的事件处理程序的代码。
我认为像这样的问题更适合在Firebug新闻组讨论。

2
感谢您提供详细的答案。我认为SO是一个非常适合这类问题的好地方。虽然许多技术都有自己的新闻组、电子邮件摘要和论坛,但我可以更轻松地在这里找到信息。如果我开始一个新项目,我会把SO作为官方的问答网站。 - Nathan Long

2

Firebug使用的是Debugger服务jsdIDebuggerService

本页包含有关Firebug内部结构的信息以及源代码链接。它并没有详细说明所有细节,但应该作为一个起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接