ChatGPT解决这个技术问题 Extra ChatGPT

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>

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

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

M
Maxence

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

Chrome 101.0.4951.64 [2022 年 5 月 27 日]

至少自 Chrome 38.0.2125.111 [2014 年 12 月 11 日] 以来,用户界面非常相似

在标签 Sources 中:

https://i.stack.imgur.com/I5gQe.png

https://i.stack.imgur.com/WQM98.png

之前的版本

Chrome 32.0.1700.102 [2014 年 2 月 3 日]

https://i.stack.imgur.com/HTGRh.png

https://i.stack.imgur.com/vGNON.png

Chrome 27.0.1453.93 稳定版

https://i.stack.imgur.com/01Etw.gif


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

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

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

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

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

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


布赖恩,谢谢你,它现在确实有效。去年 2 月我发布此功能时,此功能已经可用,但它无法正常工作,而现在似乎工作正常。感谢您的反馈。
您的链接引用的按钮似乎不再存在(至少在当前的开发频道 Chrome 版本中)。不知道如何再次执行此操作。
嗨,安德烈,我正在查看 Chrome Canary,但我仍然看到那里的按钮。它是左起第四个按钮,如 d.pr/i/DHwT 所示 - 单击一次,它会进入 Pause on All Exceptions,第二次单击将进入 Pause on Uncaught Exceptions。第三次单击将恢复为不暂停的默认设置。
当脚本被黑盒化时,这不起作用......杀死了我几个小时......希望这可以打破例外,黑盒与否......
即使是带有链接的修正答案现在也是错误的 - 我正在使用的 Chrome 69 中没有“暂停所有异常”复选框
B
Brad Parks

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

要启用它:

转到 Chrome 开发人员工具中的“源”选项卡

单击窗口底部的“暂停”按钮以切换到“暂停所有异常模式”。

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

“暂停所有例外” - 按钮为浅蓝色

“暂停未捕获的异常”,按钮为紫色。

“不要暂停异常” - 按钮颜色为灰色


M
Matthew Crumley

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

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

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


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

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


只需单击一次暂停按钮(它将为蓝色),并且不要标记选项 Pause On Caught Exceptions。这一切,它只会在错误时暂停。