【问题标题】:View Javascript calls as they happen?查看发生的 Javascript 调用?
【发布时间】:2012-09-10 18:48:47
【问题描述】:

我继承了一个相当大的项目,我正试图找出一个烦人的错误,但对于我来说,我无法找到调用和执行此特定操作的位置。有没有办法在发生 Javascript 调用时查看它们?我可以在 Firebug 中暂停执行,但它总是在 addDomListenerOnce 调用处停止。

【问题讨论】:

  • 如果您可以在代码中找到动作发生的位置,您可以在该处放置一个断点,然后查看堆栈跟踪以了解调用的来源。
  • 这就是问题所在,我在代码中找不到动作发生的位置。
  • 那么你怎么称呼“这个特定的动作”?它是如何定义的?任何应用程序中都有数以百万计的方法调用,而且它们发生得太快,以至于您无法全部看到。
  • 也许你想看看触发了什么事件?我曾经写过用我自己的替换 addEventListener 的函数,这样我就可以记录每个触发的事件。我想有人为此做了一个图书馆,但我不记得名字了。但是您还应该处理通过 setTimeout 和 setInterval 触发的代码。

标签: javascript debugging firebug javascript-debugger


【解决方案1】:

使用 Opera 的 Dragonfly,您可以选择“在新脚本的第一个语句处中断”(谢谢,@some)

它是左上角的第五个按钮。

【讨论】:

  • 确切的标题是“Break on first statement of a new script”(在 Opera 12.02 中)
【解决方案2】:

所有现代浏览器都提供调试功能。

例如查看Chrome Developer tools debbuging functions。设置断点并逐行跟踪执行非常容易。当然你有调用堆栈,所以你可以看到函数是从哪里调用的。

【讨论】:

    【解决方案3】:

    你可以添加这一行

    debugger;
    

    你想要的地方。例如,作为您要检查它是否已执行的函数的第一行。这将停止脚本的执行,您可以在 firebug 中检查所有内容。

    【讨论】:

    • [真正的问题,不是批评者] 那是跨浏览器吗?它是在哪里定义的?
    • @dystroy 不知道它是否完全跨浏览器,必须检查,但它肯定适用于 Firebug / Firefox(海报正在使用)
    • 它在ECMA262-5 12.15 中定义“评估 DebuggerStatement 生产可能允许实现在调试器下运行时导致断点。如果调试器不存在或不活动,则此语句没有可观察到的效果。 "根据this blog entry,它可以在带有firebug、IE8和Chrome 9的Firefox中运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2010-12-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多