我正在寻找一个对等的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。


当前回答

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

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

如果只需要知道异常发生在第几行(如果异常是可重复的,则可以设置断点),则给catch块的Error对象具有堆栈属性,显示异常发生的位置。

其他回答

现在Chrome的“暂停所有例外”按钮支持这一功能。

启用它:

转到Chrome开发工具中的“源代码”选项卡 点击窗口底部的“暂停”按钮,切换到“暂停所有例外模式”。

注意,这个按钮有多个状态。继续点击按钮切换

“暂停所有异常”-按钮颜色为浅蓝色 “暂停未捕获的异常”,按钮显示为紫色。 “不要暂停异常”-按钮是灰色的

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

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

如果只需要知道异常发生在第几行(如果异常是可重复的,则可以设置断点),则给catch块的Error对象具有堆栈属性,显示异常发生的位置。

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

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

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


(链接被上面编辑的链接所取代)-你现在可以设置它在所有异常或只是未处理的异常上中断。(注意,您需要在Sources选项卡中才能看到按钮。)

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

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

我遇到了麻烦,所以我发布了不同的选项的图片:

Chrome 101.0.4951.64[2022年5月27日]

自Chrome 38.0.2125.111[2014年12月11日]以来非常相似的UI

来源:

当按钮被激活时,你可以用下面的复选框暂停捕获的异常:


以前的版本

Chrome 32.0.1700.102 [03 feb 2014]

Chrome 27.0.1453.93稳定