【问题标题】:Chrome devtools erroneously pauses on exception in ignored scriptChrome devtools 在被忽略的脚本中错误地暂停异常
【发布时间】:2021-12-17 11:36:32
【问题描述】:

图像不言自明;此脚本在调试器的忽略列表中;然而每次我触发这个异常时,它都会暂停。我无法取消选中 Pause on caught exceptions,因为我试图暂停另一个启动脚本中捕获的异常。

Devtools 说 The debugger will skip stepping through this script, and will not stop on exceptions,但它只是这样做,它没有跳过这个脚本。

我尝试了几件事,例如不忽略/忽略。使用金丝雀等。我在 Windows 和 osx 机器上都有这个问题;所以它似乎与我的环境没有特别的关系。

我想知道是否有其他人遇到过这个问题并找到了解决方法。谢谢。

【问题讨论】:

  • 如果您进入配置,您是否已检查添加内容脚本以忽略列表
  • 是的,已经检查过了,但没有解决问题。这个bug一直困扰着我。我很惊讶其他人没有遇到它。感谢您的关注。
  • 当我尝试忽略一个脚本时,我实际上看到的和你一样,它仍然会因异常而中断。而且复选框似乎没有任何作用。我想知道chrome是否为此填充了一个错误。
  • 你在windows上吗?你是怎么忽略的?它是基于特定文件(右键单击脚本然后忽略)还是在正则表达式列表中设置?在 Linux Chromium 84 中,它按预期工作,但 Firefox 没有。区别:铬不是由文件专门设置的,而是由设置屏幕中的正则表达式模式(顺便说一句,它被称为黑盒而不是忽略列表)。在 Firefox 中,它是基于文件的。也许正则表达式在某种意义上更强大,它不会丢失它的引用,idk 这些文件可能会在某处丢失引用(...)
  • 我在 OSX 上。它在“忽略列表”中被忽略。我什至尝试添加匹配所有正则表达式,即/.\*/ 到忽略列表,它仍然在黑盒脚本上停止。谢谢你的帮助。我希望我可以改用 firefox,但这发生在一个节点脚本上,firefox 无法附加到该脚本上。 (虽然它也发生在浏览器脚本中,就我而言)。

标签: google-chrome devtools


【解决方案1】:

请尝试故障排除帮助,并分享一些反馈。如果您在此处粘贴一些脚本也会有很大帮助。

    1. 请检查您的脚本是否像here一样被黑框
    1. 你是不是不小心打开了 - 在所有异常情况下中断,请参阅here
    1. 强制硬刷新,即清除缓存,如here
    1. 关闭所有断点,然后进行恢复,再试一次。

更多来自参考。在chromium bug site


更新 1:您能否验证/仔细检查您要忽略的文件是 actually added to the ignore list

如果您事先知道要忽略哪些文件,请访问Developer Tools > Settings (Cog Icon) > Ignore List。然后添加您希望排除的文件名或正则表达式模式。

你应该看到类似的东西

【讨论】:

  • 谢谢。 1. 脚本应该是黑盒的。 2.已启用;它不是偶然启用的。我确实想打破例外情况;但它不应该在被忽略的脚本中出现异常(请参阅我的原始屏幕截图 - “...调试器将跳过单步执行此脚本,并且不会暂停异常”)——这就是它声称已启用的行为;但不是。 3和4。都试过了,都不管用,谢谢!它也发生在金丝雀。你要我粘贴什么脚本?
【解决方案2】:

问题仍未解决。在这里留下我的一些不成功的尝试,以便有人可以基于它们构建一些东西。

1。开发工具扩展 API

可以创建一个可以访问“开发者工具”窗口甚至“源”选项卡的附加组件,但一旦到达那里,我所能做的就是创建新的侧面板或将侦听器附加到代码文本选择更改:chrome.devtools.panels.sources.onSelectionChanged.addListener((x)=>{console.log("onselectionchanged");console.dir(x);});

这个 API 不够用,无法达到调试状态或任何有趣的侧面板。

2。用JS调试器调试调试器

通过在 devtools 调试窗口上点击 ctrl-shift-ictrl-shift-j 可以打开另一个 devtools 调试窗口,调试第一个窗口。从那里可以编写代码来检测通知文件应该被忽略的横幅,然后单击继续按钮:

function breakpointskipper() {
    bnr = document.getElementById("sources-panel-sources-view").querySelector("div.vbox.flex-auto > div > div > div > div.flex-none > div");
    if (!bnr) return;
    bnr = bnr.shadowRoot;
    if (!bnr) return;
    bnr = bnr.querySelector("div");
    if (bnr.ariaLabel != "This script is blackboxed in the debugger") return;
    btn = document.querySelector("div.scripts-debug-toolbar.toolbar");
    if (!btn) return;
    btn = btn.shadowRoot;
    if (!btn) return;
    btn = btn.querySelector("div > button[aria-label=\"Resume script execution\"]");
    if (!btn) return;
    btn.click();
}

甚至可以将此breakpontskipper() 按钮按下器附加到 devtools 窗口中的事件并自动执行操作,但是一旦您关闭正在调试的调试器窗口,一切就结束了,您必须重新创建代码和重新连接。如前所述,我无法在此处实现任何附加功能。

3。使用原生调试器调试调试器

最后一个可用选项是使用 GDB 调试 DevTools 并更改其行为,在 chromium 文档中显示它们有可用的调试符号,但我没有尝试这种方法。

【讨论】:

  • 感谢您的帮助!我很乐意将此作为答案,但由于没有一个解决方案实际上是一个修复,我想我会保持开放,直到可能有人希望遇到这个并知道发生了什么:)
  • 别担心,不客气
猜你喜欢
  • 2023-04-04
  • 2019-05-20
  • 2015-12-11
  • 2012-06-10
  • 2016-06-01
  • 1970-01-01
  • 2014-06-10
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多