JavaScript:有没有办法让 Chrome 解决所有错误?

IT技术 javascript google-chrome debugging webkit
2021-01-24 17:40:07

我正在 Chrome 中寻找与 Firebug 的“中断所有错误”功能等效的功能。在脚本选项卡中,Chrome 有一个“暂停所有异常”,但这与中断所有错误并不完全相同。

例如,在加载包含以下代码的页面时,我希望 Chrome 断线foo.bar = 42相反,即使启用“在所有异常时暂停”,我也没有得到预期的结果。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

您可以尝试在此页面上粘贴上面的代码或使用此jsFiddle

5个回答

我在获取它时遇到了麻烦,所以我发布了显示不同选项的图片:

Chrome 92.0.4515.131 [2021 年 8 月 11 日]

至少自 Chrome 38.0.2125.111 [2014 年 12 月 11 日] 以来非常相似的用户界面

在选项卡中Sources

在此处输入图片说明

当按钮被激活时,您可以Pause On Caught Exceptions使用下面的复选框: 在此处输入图片说明


之前的版本

Chrome 32.0.1700.102 [2014 年 2 月 3 日]

在此处输入图片说明

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

27.0.1453.93稳定

调试选项

我不得不赞扬 Facebook 在他们的文档中直接链接到这个。+1
2021-03-31 17:40:07
另外要注意的是,如果侧边栏没有展开,按钮将简单地隐藏,没有任何迹象表明它们在那里。
2021-04-10 17:40:07

编辑:我回答的原始链接现在无效截至 2016 年 11 月 11 日,较新的 URL 将是https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions

我意识到这个问题有答案,但它不再准确。使用上面的链接^


(链接由上面编辑替换)-您现在可以将其设置为在所有异常或未处理的异常上中断。(请注意,您需要在“来源”选项卡中才能看到该按钮。)

Chrome 现在还添加了一些其他非常有用的断点功能,例如中断 DOM 更改或网络事件。

通常我不会重新回答问题,但我自己也有同样的问题,我发现这个现在是错误的答案,所以我想我会把这些信息放在这里供后来搜索的人使用。:)

布赖恩,谢谢你,它现在确实有效。这个功能在去年 2 月我发布的时候就已经可用了,但它不能正常工作,而现在它似乎工作正常。感谢您的反馈。
2021-03-18 17:40:07
即使修改后的链接答案现在也是错误的 - 我正在使用的 Chrome 69 中没有“暂停所有异常”的复选框
2021-03-18 17:40:07
嗨安德烈,我正在看 Chrome Canary,但我仍然看到那里的按钮。它是左起第四个按钮,如d.pr/i/DHwT所示- 单击一次,它将进入暂停所有异常,第二次单击将使其进入暂停未捕获异常。第三次单击返回到不暂停的默认设置。
2021-03-30 17:40:07
您的链接引用的按钮似乎不再存在(至少在当前的开发频道 Chrome 版本中)。不知道如何再次执行此操作。
2021-04-02 17:40:07
当脚本被黑盒化时,这不起作用......杀了我几个小时......希望这能打破异常,无论是否被黑盒化......
2021-04-08 17:40:07

Chrome 现在通过“在所有例外情况下暂停”按钮支持这一点。

要启用它:

  • 转到 Chrome 开发者工具中的“来源”标签
  • 单击窗口底部的“暂停”按钮切换到“在所有例外模式下暂停”。

请注意,此按钮有多种状态。一直点击按钮切换

  • “在所有例外情况下暂停” - 按钮为浅蓝色
  • “暂停未捕获的异常”,按钮为紫色
  • “不要暂停异常” - 按钮为灰色

几乎任何错误都会引发异常。我能想到的唯一一个不适用于“异常暂停”选项的错误是语法错误,它发生在任何代码被执行之前,因此无论如何都没有暂停的地方,任何代码都不会运行。

显然,如果它在 try-catch 块内,Chrome 不会暂停异常。它只暂停未捕获的异常。我不知道有什么办法可以改变它。

如果您只需要知道异常发生在哪一行(如果异常可重现,您可以设置断点),则Error提供给 catch 块对象具有stack显示异常发生位置的属性。

马修,我“复制”了与我遇到的情况类似的内容(请参阅更新的问题)。不知何故,我没有让调试器因该错误而中断。您是否知道为什么这不适用于 Chrome(启用“中断所有错误”时它与 Firebug 一起使用)。
2021-03-13 17:40:07
@Mathhew,我创建了另一个答案,说这是不可能的,并将其标记为答案。如果您或其他人找到解决方案,我将更改标记。
2021-04-11 17:40:07

不幸的是,Chrome 中的开发人员工具似乎无法像 Firebug 那样“停止所有错误”。

只需单击暂停按钮一次(它将显示为蓝色),并且不要标记在捕获异常时暂停选项。这一切,它只会在出现错误时暂停。
2021-04-04 17:40:07