JavaScript:有没有办法让Chrome在出现所有错误时都中断?

JavaScript:有没有办法让Chrome在出现所有错误时都中断?,javascript,google-chrome,debugging,webkit,Javascript,Google Chrome,Debugging,Webkit,我正在寻找一个与Firebug的“在所有错误上中断”功能相当的Chrome。在脚本选项卡中,Chrome有一个“暂停所有异常”,但这与中断所有错误并不完全相同 例如,当加载包含以下代码的页面时,我希望Chrome在foo.bar=42行上断开。相反,即使启用“暂停所有异常”,我也没有得到预期的结果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD

我正在寻找一个与Firebug的“在所有错误上中断”功能相当的Chrome。在脚本选项卡中,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>

函数doError(){
foo.bar=42;
}
window.onload=函数(){
试一试{
多罗();
}捕获(e){
控制台日志(“错误”,e);
}
}

您可以尝试上面粘贴的代码,也可以使用它。

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

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


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

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

编辑:我回答的原始链接现在无效。。更新的URL将从2016-11-11开始

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


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

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


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

这现在在Chrome中通过“暂停所有异常”按钮得到支持

要启用它,请执行以下操作:

  • 转到Chrome开发者工具中的“源”选项卡
  • 单击窗口底部的“暂停”按钮,切换到“暂停所有异常模式”
请注意,此按钮有多个状态。继续单击此按钮可在两种状态之间切换

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

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

75.0.3770.142[2018年7月29日] 非常相似的用户界面,因为至少Chrome 38.0.2125.111[2014年12月11日]

在选项卡
源中

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


以前的版本 铬32.0.1700.102[2014年2月3日]

27.0.1453.93稳定

您在考虑什么其他类型的错误?任何错误,比如:引用未定义的变量(如
console.log(gaga)
)或引用未定义的属性(如
window.foo.bar
)。这些应该会引发异常。“暂停异常”“这个选择对我很有用。我能想到的唯一不起作用的错误是语法错误,但这些错误发生在代码执行之前。是的,我现在正在尝试,似乎在错误出现的地方出现了中断。我几天前就做过这件事,它不是在代码中错误的地方破译,而是在错误引起的异常被捕获的地方破译,一直到堆栈的最上层。算了吧!Matthew,我“复制”了一些与我的案例类似的东西(见更新的问题)。不知何故,我没有让调试器在这个错误上中断。你知道为什么这对Chrome不起作用吗(当启用“所有错误都中断”时,Firebug会起作用。)@Mathhew,我创建了另一个答案,说这是不可能的,并将其标记为答案。如果你或其他人找到了解决方案,我会改变标记。布莱恩,谢谢你,它现在确实在工作。这项功能在去年2月我发布这篇文章时已经可用了,但它不能正常工作,而现在它似乎工作得很好。感谢您的反馈。您的链接中提到的按钮似乎不再存在(至少在当前的开发频道Chrome版本中)。不知道该怎么做。嗨,安德烈,我在看铬金丝雀,我仍然看到按钮在那里。这是从左边开始的第四个按钮,如所示,单击一次,它将进入暂停所有异常,第二次单击将使它暂停未捕获的异常。第三次单击将返回默认状态,即不暂停。恐怕链接已断开:(很抱歉没有早点看到评论!它似乎包含了之前内容的要点。如果可以的话,我也会修改原始答案。我必须赞扬Facebook在他们的文档中直接链接到了这一点。+1另外,如果侧边栏没有展开,按钮会简单地隐藏起来,没有任何显示。只需cli即可。)在“暂停”按钮上勾选一次(它将是蓝色的),不要在捕获的异常上标记“暂停”。所有这些,它只会在出现错误时暂停。