【问题标题】:Debugging JavaScript events with Firebug使用 Firebug 调试 JavaScript 事件
【发布时间】:2009-04-05 11:34:14
【问题描述】:

我需要为某个事件设置一个断点,但我不知道它在哪里定义,因为我有一大堆最小化的 JavaScript 代码,所以我无法手动找到它。

是否有可能以某种方式设置断点,例如 ID 为 registerButton 的元素的点击事件,或者在某处找到绑定到该事件的函数?

我找到了 Firefox 插件 Javascript Deobfuscator,它显示了当前执行的 JavaScript,这很好,但是我需要调试的代码是使用 jQuery,所以有即使在最简单的事件上也有大量的函数调用,所以我也不能使用它。

有没有专门为 jQuery 制作的调试器?

有没有人知道一些工具可以将 minified JavaScript 转回 formatted 代码,例如将 function(){alert("aaa");v=3;} 转回

function() {
   alert("aaa");
   v = 3;
}

【问题讨论】:

标签: javascript jquery debugging firebug


【解决方案1】:

好吧,这一切可能都太麻烦了,但看起来你有三件事要做:

  1. 去缩小源。我喜欢this online tool,因为它又快又脏。只需粘贴您的代码并单击按钮。从来没有让我失望过,即使是最时髦的 JavaScript。

  2. 所有 jQuery 事件绑定器都被路由到 "jQuery.event.add" (here's what it looks like in the unbuilt source),因此您需要找到该方法并在那里设置断点。

  3. 如果您已经走到这一步,您需要做的就是检查断点处的调用堆栈,看看谁调用了什么。请注意,由于您位于库的内部位置,因此您需要检查一些跳转(因为调用 "jQuery.event.add" 的代码很可能只是其他 jQuery 函数)。

注意 3) 需要 Firebug 用于 FF3。如果你和我一样喜欢使用 Firebug 调试 FF2,你可以使用古老的 arguments.callee.caller.toString() 方法来检查调用堆栈,根据需要插入尽可能多的 ".caller"。


编辑:另见"How to debug Javascript/jQuery event bindings with FireBug (or similar tool)"

你也许可以逃脱:

// inspect    
var clickEvents = jQuery.data($('#foo').get(0), "events").click;
jQuery.each(clickEvents, function(key, value) {
    alert(value) // alerts function body
})

上面的技巧会让你看到你的事件处理代码,你可以直接在你的源代码中寻找它,而不是尝试在jQuery的设置断点来源。

【讨论】:

    【解决方案2】:

    首先将缩小的 jquery 或您使用的任何其他源替换为格式化。我发现的另一个有用的技巧是在 firebug 中使用分析器。分析器显示正在执行的函数,您可以单击其中一个并前往那里设置断点。

    【讨论】:

    • 是的,但是分析器在与 jQuery 一起使用时不是很方便。
    • 然后使用非缩小版。有什么问题?
    • 问题是我没有所有来源的非缩小版。
    【解决方案3】:

    只是更新:

    Google Chrome(其中的开发工具)支持各种断点,以及break on Event

    所有事件以及设备方向变化和计时器

    您可以看到a video,其中展示了 Google IO 的所有功能。

    还有内置的 deminifier/ unminimizer/ prettifier 可帮助您在压缩的 javascript 文件上手动设置断点。

    【讨论】:

      【解决方案4】:

      您可以做的是获取缩小的代码 - 您将可以访问它。根据 Crescent Fresh 的 (1) 选项或您喜欢的任何方法对代码进行分解。

      然后下载并安装 Fiddler - 所有网络开发人员都应该安装这个令人难以置信的工具。

      然后使用 Fiddler,您可以使用本地驱动器上的本地 unminified.js 拦截浏览器对 minified.js 文件的调用。

      Fiddler 基本上会拦截您的浏览器对特定文件的请求,并可以为您的浏览器提供不同的文件。所以你现在可以查看未缩小的代码。

      简单。

      另一个选择是使用 Firefox 并在其上安装 Venkman 调试器 - 远比 Firebug 恕我直言 - Venkman 调试器有一个“漂亮的打印”选项,可以在运行时直观地取消缩小缩小的代码。现在在任何你想要的地方设置你的断点......

      【讨论】:

        【解决方案5】:

        另一个更新:现在有一个可以美化 JavaScript 的 firebug 扩展:

        https://addons.mozilla.org/en-US/firefox/addon/javascript-deminifier/

        它在 Firefox 12.0 中非常适合我。

        感谢answer 发现它。

        【讨论】:

          【解决方案6】:

          您可以在 javascript 文件中的任何位置使用debugger 命令。当解释器命中该语句时,如果有可用的调试器(如 Firebug),则会触发它

          【讨论】:

          • 问题是我不知道代码在哪里定义了事件。我需要调试器来告诉我,例如通过显示绑定的函数,或者为事件设置断点而不需要知道它在代码中的位置。
          【解决方案7】:

          找到该行并放置一个断点。然后重新加载站点/页面。那么firebug会在遇到断点时自动暂停语句的执行。

          【讨论】:

            【解决方案8】:

            这将完成这项工作。 http://jsbeautifier.org/ 您也可以在 Google 上搜索 javascript 美化器。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-10
              • 2011-06-09
              • 1970-01-01
              • 1970-01-01
              • 2010-10-08
              相关资源
              最近更新 更多