设置事件监听器断点

从 Firefox 69 开始,调试包含事件处理程序的应用程序变得更加简单,因为调试器现在包括在代码到达事件处理程序时自动中断的功能。本文介绍了如何使用它。

使用标准事件断点

要使用事件断点,请打开 JavaScript 调试器,并在右侧栏中找到并展开“事件监听器断点”部分。

The list of event listener breakpoints in the right hand column

要中断事件监听器被命中时,请选中您感兴趣的事件旁边的复选框。Firefox 版本中支持的所有标准事件都列出,并按其所属的 API 或 API 区域进行排列。

现在,当keydownkeyupkeypressinput事件发生时,执行将在进入监听器代码时暂停。

execution is paused on an event breakpoint and the source panel shows what line it is paused on

当执行暂停时,“源代码面板”将显示接下来要执行的 JavaScript 代码的高亮行以及周围的代码以供上下文参考。此外,您会在视口中看到一个覆盖框,上面写着“在事件断点处暂停”,并带有按钮,可以跳过该代码行或恢复执行。

可以在监听器的入口点添加常规断点以达到相同的效果。但是,如果您有多个元素,并且所有这些元素都附加了您想要中断的事件监听器,那么这将节省大量时间。

这在调试您不熟悉的代码时也很有用,可以节省在代码中查找事件处理程序的时间,或者在尝试了解网站为何在浏览器中无法按预期工作时。使用事件断点在导致失败操作的触发事件处停止执行,然后逐步执行代码或监视控制台以查看发生了什么。

事件日志

在 Firefox 71 及更高版本中,“事件监听器断点”列表中提供了“日志”复选框。选中此选项,然后选择一些要中断的事件,这意味着当您逐步执行代码时,有关触发的事件的信息将记录到控制台中,而不是 DevTools 在每个事件上中断。

例如,如果我们选择记录键盘事件,则代码不再在每个事件触发时暂停

log on events checkbox

相反,我们可以切换到控制台,并且每当我们按下键时,我们都会收到相关事件触发位置的日志。

events logged in console

这里存在一个问题——控制台显示keypress 事件在 jQuery 内部某个地方被触发。相反,如果我们显示我们自己的应用程序代码中调用触发事件的 jQuery 的位置,将会更有用。这可以通过在“源代码”面板中找到jquery.js,并从其上下文菜单中选择“忽略源选项”来实现。

blackbox jquery source

现在,日志将显示在应用程序中调用 jQuery 的位置,而不是在 jQuery 中触发事件的位置

events logged in console with lines shown where our source calls jQuery.

按事件类型筛选

Firefox 71 还添加了一个新的“按事件类型筛选…”文本输入框,它也可以在“事件监听器断点”列表顶部找到。当您单击此输入框并键入搜索词时,事件监听器类型的列表将按该词进行筛选,使您可以更轻松地找到要中断的事件。

../../../_images/filter-event-breakpoints.png

内联变量预览

Firefox 71 中的新功能,“源代码面板”现在会为您提供已逐步执行的每一行代码上的变量的即时预览。有关更多信息,请参阅设置断点 > 内联变量预览