Chrome 开发者工具在未设置断点的地方不断中断

Chrome Developer Tools keeps breaking where no breakpoints are set

提问人:Mark Erasmus 提问时间:5/9/2015 最后编辑:CommunityMark Erasmus 更新时间:11/18/2023 访问量:14542

问:

使用 Chrome 开发者工具调试 JavaScript 代码时,调试器会在未设置断点的代码上暂停。我没有启用该功能,并且肯定没有设置断点(见附图)。Pause on exceptions

我之前问过一个类似的问题,这很有帮助,但并没有完全解决这个问题(以前我启用了)。在下面的示例中,我将缩小版本换成了未缩小版本,这使我可以看到脚本执行暂停的位置,但我不知道为什么暂停。这种情况也经常发生。Pause on exceptionskendo.all.min.jsjquery.min.js

enter image description here

javascript google-chrome-devtools

评论

0赞 Tom 5/9/2015
您是否尝试过刷新和清除缓存?CTRL + F5
2赞 Mark Erasmus 5/9/2015
@Tom我几乎只在进行页面刷新时使用。CTRL + F5
0赞 Jack 5/9/2015
在“开发人员工具”中的“源”下,是否看到定义了任何断点?
0赞 Mark Erasmus 5/9/2015
@JackPattishall 只有我定义的那些。
6赞 HMR 12/2/2015
我经常遇到这种情况;ghost 断点中断,但不显示我在我的 mussle 内存中删除和创建配置文件的任何地方。希望有一天 Chrome 团队会解决这个问题,因为当它随机停在你不希望它的地方并且除非你关闭所有断点否则无法关闭它时,它肯定会带走使用 deftools 的乐趣。

答:

60赞 Crazy Cat 11/18/2016 #1

我通过单击“设置”部分中的“恢复默认值并重新加载”按钮解决了断点问题。要查找该按钮:在“开发者工具”中,单击右上角三个垂直点旁边的齿形轮。(注意:如果使用旧版本的Google Chrome,请单击右上角的三个垂直点,然后选择“设置F1”)。“恢复默认值并重新加载”按钮位于右下角。

另请注意,它确实恢复了默认值 - 您将丢失所有以前保存的断点,并且在开发人员工具中打开的任何文件都将被关闭。

我从以下位置得到了这个解决方案:Chrome javascript 调试器断点不执行任何操作?

评论

4赞 Dylan Pierce 5/17/2017
这绝对有效,但它也会恢复您的控制台设置,例如将控制台放回垂直方向以及您忘记放入其中的任何自定义设置。我希望 Chrome 能加强他们的开发者工具游戏。调试器是一个很棒的工具,但像这样的小工具正在变得不受欢迎。
1赞 jcollum 6/21/2019
2 年后,这仍然是我发现的唯一有效方法......别期望太高。
2赞 Bigman74066 2/7/2021
“恢复默认值并重新加载”按钮似乎已移动。不要轻蜗这三个点,而是轻蜗这些点旁边的齿轮。在那里(滚动一段时间后),您会找到该按钮。是的......删除的断点仍可能在 2021 年 2 月中断代码执行
2赞 jcollum 3/18/2022
这是 2 年后,我写了“2 年后”,问题再次出现,“恢复默认值并重新加载”再次修复了它。👍
2赞 tiriana 7/18/2022
2022 年 - 仍然是唯一有帮助的事情。
0赞 lehp 8/23/2019 #2

F8 有两个功能。1. 跳过下一个断点,2.在浏览器执行代码的任何地方停止。即使未设置断点,此操作也有效。例如,当您忘记停用断点时,向 F8 发送垃圾邮件可能会导致浏览器在任意位置停止。

当您转到调试器快捷方式时,您可以看到 F8 具有暂停/继续功能。但遗憾的是,您似乎无法将它们拆分到两个不同的键绑定上。

自从我知道这个功能以来,我再也没有遇到过这个“错误”。

-1赞 yasin 10/26/2020 #3

只需禁用缓存并重新加载页面,断点就会再次显示

评论

2赞 claudekennilol 11/16/2021
禁用什么缓存?
6赞 vike 7/17/2022 #4

计算机之间导入/导出 Chrome devtools 断点和设置的接受答案提醒我检查“devtools-on-devtools”,并在 DevTools 的内部应用程序本地存储中删除密钥的 JSON 列表值的错误元素,以解决我的相同问题,而无需重置所有内容breakpoints


后来它又发生了,所以我写了这个控制台片段:

((stores, matchKey, removeMatchingRegExp, dryRun)=>{for(let store of stores){
  let r = JSON.parse(localStorage[store]), l = r.length;
  r = r.filter(b=>!b[matchKey].match(removeMatchingRegExp));
  if(!dryRun) localStorage[store] = JSON.stringify(r);
  console.log(`${dryRun ? 'Would' : 'Did'} remove ${l - r.length} entries from ${store}:`, r)}; return 'OK'})
(['breakpoints', 'domBreakpoints'], 'url',
  new RegExp('^https?://example.com/script.js$'), true)

注意:

  • 无保修:使用风险自负。备份您的数据。
  • 编辑它 - 至少是参数 - 以满足您的需求。RegExp
  • 最后一个布尔值应该是禁用 。falsedryRun
  • 必须重新打开外部 DevTools 才能生效。
1赞 Ralph David Abernathy 7/20/2022 #5

我能够通过更新 Chrome 来解决这个问题。我认为版本并不重要,只是更新过程会重置缓存中存储的所有断点。

0赞 kenswdev 12/13/2022 #6

我发布这个答案是为了防止它能帮助像我一样错过有关幻像断点行为原因的重要线索的人。就我而言,这是“用户错误”——我的。根本原因是 JavaScript 文件中被遗忘的“调试器”语句,该文件本身是从 TypeScript 生成的。我已经删除了调试器;语句,在本地运行和测试,从 localhost 运行和测试,没有问题。但是我已经将带有该语句的版本推送到远程,它构建并发布到我们的开发站点,并存在该语句。开发网站版本不包括 TypeScript 源文件。命中调试器语句时,Chrome 尝试加载 .ts 源并显示“无法加载内容...”我只是假设它处于断点(我在测试期间设置了很多)。当我看到“无断点”时,我以为 Chrome 遇到了此线程中解决的问题。如果我费心查看调用堆栈跟踪,我会在 .ts 文件中看到源代码行,并很快弄清楚它。下面是一个屏幕截图:

enter image description here

0赞 David G 3/26/2023 #7

即使没有设置明显的断点,我也遇到了同样的问题。似乎唯一阻止它的是切换选项(Ctrl + F8)。Deactivate breakpoints

The 'Deactivate breakpoints' toggle in Chrome's Developer Tools

这样可以防止 Chrome 在虚拟断点处停止,有时还会导致它在源代码中显示(禁用),从而允许将其删除。

更新 - 2023 年 11 月 17
刚刚在开发人员工具设置中找到了一个更有可能的解决方案;在“实验”下,有一个“启动时急切地设置所有断点”选项

Chrome's Developer Tools' Experiments settings

清除此复选框会使“隐藏”断点可见,因此可以将其删除。