【问题标题】:Firefox - Disable 'debugger' keywordsFirefox - 禁用“调试器”关键字
【发布时间】:2017-02-07 13:21:20
【问题描述】:

如果 Firefox 看到 debugger 关键字,我如何告诉它不要停止?

我需要避免连续的debugger 循环,以防网站使用调试保护,使用计时器即时生成debugger 语句。

这是一个例子。如果您打开调试控制台,脚本会抛出大量调试器语句,这会阻止您进行正常的调试工作。

一个示例网站是http://www.avito.ru - 俄罗斯最大的分类网站。打开它,然后打开调试器控制台,它会立即停在生成脚本中的debugger关键字处。

(function(x/**/) {
    (function(f){
        (function a(){
            try {
                function b(i) {
                    if(
                        (''+(i/i)).length !== 1 ||
                        i % 20 === 0
                    ) {
                        (function(){}).constructor('debugger')();
                    } else {
                        debugger;
                    }

                    b(++i);
                }

                b(0);
            } catch(e) {
                f.setTimeout(a, x)
            }
        })()
    })(document.body.appendChild(document.createElement('frame')).contentWindow);
});

【问题讨论】:

  • 由于您没有提及您使用的工具,我添加了“firebug”和“firefox-developer-tools”标志。
  • 供参考,同样的问题是asked in the Firebug discussion group,以网站www.avito.ru为例。
  • 塞巴斯蒂安,我也在那儿寻求帮助 :)
  • 我是这么认为的:-),尽管在您的问题中您没有将网站作为示例,所以我想我会在评论中提到它。您仍然可以调整您的问题以包含该链接。

标签: javascript debugging firefox firebug firefox-developer-tools


【解决方案1】:

显然,该页面试图避免人们使用该结构调试他们的 JavaScript 代码。

在 Firebug 中调试

Firebug 允许在debugger 语句上设置禁用断点。因为页面会生成一个可变的调用堆栈深度,所以您需要设置这些禁用的断点,以便所有这些断点能够正确调试 JavaScript。不幸的是,Firebug 在设置这些断点时似乎有问题。

此外,Firebug 没有忽略所有 debugger 语句的选项。

因此,如果您不需要调试 JavaScript 而只需要调试 HTML、CSS、网络请求等,您可以简单地禁用 Script 面板以避免这些烦人的调试器停止。为此,请右键单击 Script 选项卡,然后在打开的菜单中单击 Enable

注意:因为Firebug development is discontinued,所以提交增强请求是没有用的。

在 Firefox DevTools 中调试

不幸的是,Firefox DevTools 目前不允许避免在 debugger 语句上停止。所以你必须等到bug 1300934(以同一个网站为例)、bug 925269 和/或issue 828 修复。

此外,没有办法完全禁用 Debugger 面板,该面板被归档为bug 1247198

【讨论】:

  • Firebug 当然是开源的(就像 Firefox 一样)。因此,可以对其进行修改以添加所需的功能并发送拉取请求。
  • 正确,但如前所述,一旦启用 multi-process Firefox,Firebug 将停止工作并停止工作。此外,Firefox DevTools 是开源的,因此最好为它们提供补丁。
  • 抱歉,我的意思是“修改其中任何一个”,而不是专门的 Firebug。
  • 所以基本上只有一个选择 - 尝试为 firefox 开发工具实现此功能并获得批准...
  • 正确。由于调试器的主要工作现在似乎在 GitHub 上,issue 828 似乎是这样做的正确位置。
【解决方案2】:

如果你使用Greasemonkey你可以重写setTimeout/setInterval函数来禁用脚本

unsafeWindow.setTimeout = function () {};

【讨论】:

  • 这当然会阻止页面窗口范围内的所有超时计时器工作
【解决方案3】:

在编写此答案的当前版本的 Firefox(版本 63.0.3)中,在开发人员工具的调试器部分中,有一个带有工具提示“跳过所有暂停”或“停用断点”的图标。启用后,它似乎会禁止在任何 debugger 指令处停止。

【讨论】:

  • 这就是现代界面糟糕的原因。在过去,这将是“调试”顶级菜单中的一个菜单项。
  • 这对我不起作用,调试器仍然在 debugger 上停止。
【解决方案4】:

在 chrome 中,您可以编辑断点并设置一个始终为假的条件,它不会再命中调试器

另一种选择是使用“从不在这里暂停”

火狐

对于firefox,你可以blackbox你不想被断点击中的脚本。对我来说,它导致挂起Firefox。但是当你重新启动浏览器时。然后就好了

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2018-07-08
    • 2012-09-30
    • 2012-08-08
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多