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

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

743572 次浏览

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

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

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

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

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

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


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

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

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

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

启用它:

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

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

  • “暂停所有异常”-按钮的颜色为浅蓝色的
  • "暂停未捕获的异常",按钮的颜色为紫色的
  • "在异常时不暂停" -按钮的颜色是灰色的

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

Chrome 101.0.4951.64[2022年5月27日]

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

在选项卡Sources中:

enter image description here

当按钮被激活时,你可以用下面的复选框Pause On Caught Exceptions: enter image description here


以前的版本

Chrome 32.0.1700.102 [03 feb 2014]

enter image description here

enter image description here enter image description here enter image description here

Chrome 27.0.1453.93稳定

Debug options