JavaScript:有没有办法让 Chrome 打破所有错误?

Posted

技术标签:

【中文标题】JavaScript:有没有办法让 Chrome 打破所有错误?【英文标题】:JavaScript: Is there a way to get Chrome to break on all errors? 【发布时间】:2011-01-15 01:20:37 【问题描述】:

我正在 Chrome 中寻找与 Firebug 的“中断所有错误”功能等效的功能。在 Scripts 选项卡中,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>

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

【问题讨论】:

您还想到了哪些其他类型的错误? 任何错误,比如:对未定义变量(如console.log(gaga))或未定义属性(如window.foo.bar)的引用。 那些应该抛出异常。 “暂停异常”选项对我有用。我能想到的唯一错误是语法错误,但这些错误发生在代码执行之前。 是的,我现在正在尝试这个,它似乎打破了错误所在。几天前我已经这样做了,而不是破坏代码中的错误,它破坏了由错误引起的异常被捕获的地方,向上堆栈。去图吧! 【参考方案1】:

我很难得到它,所以我发布了显示不同选项的图片:

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 日]

Chrome 27.0.1453.93稳定

【讨论】:

我不得不赞扬 Facebook 在他们的文档中直接链接到这个。 +1 还需要注意的是,如果侧边栏没有展开,按钮将简单地隐藏起来,没有任何迹象表明它们在那里。【参考方案2】:

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

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


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

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

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

【讨论】:

Brian,谢谢,现在确实可以使用了。去年 2 月我发布此功能时,此功能已经可用,但它无法正常工作,而现在似乎工作正常。感谢您的反馈。 链接引用的按钮似乎不再存在(至少在当前的开发频道 Chrome 版本中)。不知道如何再次执行此操作。 嗨,Andrey,我正在查看 Chrome Canary,但我仍然看到那里的按钮。它是左起第四个按钮,如d.pr/i/DHwT 所示 - 单击一次,它会进入暂停所有异常,第二次单击将进入暂停未捕获异常。第三次点击返回默认不暂停。 当脚本被黑盒化时这不起作用...杀死了我几个小时...希望这可以打破异常,黑盒与否... 即使是带有链接的修正答案现在也是错误的 - 我正在使用的 Chrome 69 中没有“暂停所有异常”复选框【参考方案3】:

现在,Chrome 中的“暂停所有例外”按钮支持此功能。

启用它:

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

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

马修,我“复制”了与我的情况类似的东西(请参阅更新的问题)。不知何故,我没有让调试器打破那个错误。您是否知道为什么这不适用于 Chrome(在启用“中断所有错误”时它与 Firebug 一起使用)。 @Mathhew,我创建了另一个答案,说这是不可能的,并将其标记为答案。如果您或其他人找到解决方案,我将更改标记。【参考方案5】:

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

【讨论】:

只需单击一次暂停按钮(它将为蓝色)并且不要标记选项在捕获异常时暂停。就是这样,它只会在出现错误时暂停。

以上是关于JavaScript:有没有办法让 Chrome 打破所有错误?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Chrome 的 Inspector 中查看实时执行的 Javascript 函数(函数的名称)?

Android (5.0.1) Chrome 正在删除 javascript 空白和评论,有没有办法阻止这种情况?

在 Google Chrome 控制台中查看所有 JavaScript 变量的列表

有没有办法让 CSS :not() 选择器在 IE 和 Chrome 中工作?

有没有办法让 Google Chrome Frame 适用于 Facebook Canvas 应用程序?

通过远程调试协议将 javascript 代码发送到 chrome 应用程序