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