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


258

我正在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


您还在想什么其他类型的错误?
马修·克鲁姆利

1
任何错误,例如:对未定义变量(如console.log(gaga))或未定义属性(如window.foo.bar)的引用。
avernet

2
那些应该抛出异常。“在例外情况上暂停”选项适用于我。我能想到的唯一错误是语法错误,但是这些错误在代码执行之前发生。
马修·克鲁姆利

1
是的,我现在正在尝试此操作,它似乎打破了错误所在。我几天前就这样做了,而不是打破错误在代码中的位置,而是打破了由错误导致的异常被捕获的位置,一直到堆栈。去搞清楚!
avernet

Answers:


210

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

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


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

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

通常,我不会回答一个问题,但是我自己也有同样的问题,所以我找到了现在错误的答案,因此我认为我会将这些信息放在这里,供以后搜索的人使用。:)


1
布莱恩,谢谢你,它确实现在正在工作。去年2月,当我发布此功能时,该功能已经可用,但是它不能正常工作,尽管现在似乎可以正常工作。感谢您的反馈。
avernet 2011年

您的链接所指向的按钮似乎不再存在(至少在当前的开发者通道Chrome版本中)。不确定如何再次执行此操作。
安德烈·费多罗夫

2
嗨,安德烈,我在看Chrome Canary,但仍然看到那里的按钮。它是从左开始的第四个按钮,如d.pr/i/DHwT所示-单击一次,进入“所有异常暂停”,再单击一次将其变为“未捕获的异常暂停”。第三次单击将返回默认值,即不暂停。
布莱恩·阿诺德·辛克莱

链接断开了,我担心:(
Rick

1
很抱歉没有尽快收到评论!似乎developers.google.com/web/tools/chrome-devtools/javascript/…具有以前的内容要旨。如果可以的话,我也会修改原始答案。
Brian Arnold Sinclair

298

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

75.0.3770.142 [2018年7月29日]

至少从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稳定

调试选项


22
我必须称赞Facebook直接在他们的文档中链接到此。+1
jimm101

1
还需要注意的是,如果未扩展侧栏,则按钮将仅隐藏,而没有指示它们在那里。
Eric Majerus

17

Chrome现在通过“在所有例外情况上暂停”按钮支持此功能。

要启用它:

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

请注意,此按钮具有多种状态。持续点击按钮即可在

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

1

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

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

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


马修,我“转载”了与我的情况类似的东西(请参阅更新的问题)。不知何故,我没有让调试器打破该错误。您是否知道为什么这不适用于Chrome浏览器(启用“打破所有错误”时,它与Firebug兼容)。
avernet

@Mathhew,我创建了另一个答案,说这是不可能的,并将其标记为答案。如果您或其他人找到解决方案,我将更改标记。
avernet

1

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


只需单击一次“暂停”按钮(它将为蓝色),并且不标记“在捕获的异常时暂停”选项。如此,它将仅在错误时暂停。
罗伊·肖阿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.