251

在 Google Chrome 调试器中单步执行 JavaScript 代码时,如果我不想继续,如何终止脚本执行?我发现的唯一方法是关闭浏览器窗口。

按“重新加载此页面”会运行其余代码,甚至可以像按 F8“继续”一样提交表单。

更新

在脚本暂停时按 F5(刷新):

  • Google Chrome (v22) 运行该脚本。如果脚本提交 HTTP 请求,则会显示该请求的 HTTP 响应。原始页面未刷新。
  • IE 9 只是冻结。但是 IE 有一个“停止调试”选项,当按下它时(前提是您之前没有按 F5),它会继续在调试器之外运行脚本。
  • Firebug 的行为与 Chrome 相同。

关闭然后再次打开浏览器窗口并不总是最简单的方法,因为它会终止浏览器会话状态,这可能很重要。你所有的断点也丢失了。

更新(2014 年 1 月)

调试时刷新:

  • Chrome v31:让脚本在更多断点处运行和停止(但不提交 ajax 请求),然后刷新。
  • IE 11:刷新什么都不做,但你可以按 F5 继续。
  • Firefox v26:允许脚本运行但不会在进一步的断点处停止,提交 ajax 请求,然后刷新。

有点进步!

调试时导航到同一页面:

  • Chrome v31:与刷新相同。
  • IE 11:脚本终止,新的浏览器会话开始(与关闭和再次打开相同)。
  • Firefox v26:没有任何反应。

juacala还提出了一种有效的解决方法。例如,如果您使用 jQuery,从控制台运行delete $将在遇到任何 jQuery 方法时停止执行。我已经在上述所有浏览器中对其进行了测试,并且可以确认它可以正常工作。

更新(2015 年 3 月)

最后,经过 2 年多和近 1 万次浏览,Alexander K 给出了正确答案。谷歌浏览器有自己的任务管理器,可以在关闭标签本身的情况下终止标签进程,保持所有断点和其他内容完好无损。

我什至跑到 BrowserStack.com 在 Chrome v22 中对其进行测试,发现即使在当时也是如此。

在 IE 或 Firefox 中进行调试时,Juacala 的解决方法仍然很有用。

更新(2019 年 1 月)

Chrome 开发工具最后添加了一种停止脚本执行的正确方法,这很好(虽然有点隐藏)。有关详细信息,请参阅 James Gentes 的答案。

4

11 回答 11

202

在 Chrome 中,有“任务管理器”,可通过Shift+ESC或通过

菜单 → 更多工具 → 任务管理器

您可以选择您的页面任务并按“结束进程”按钮结束它。

于 2014-12-03T01:11:05.513 回答
137

截至2018 年 4 月,您可以在 Chrome 中停止无限循环

  1. 在开发者工具 ( + + **)中打开Sources面板。CtrlShiftI
  2. 单击暂停按钮以暂停脚本执行

还要注意快捷键:F8Ctrl+\

在此处输入图像描述

于 2018-08-11T17:51:03.887 回答
69

2020年4月更新

从 Chrome 80 开始,当前的答案都不起作用。没有可见的“暂停”按钮 - 您需要长按“播放”按钮才能访问停止图标:

在 Chrome DevTools 中停止脚本执行

于 2020-03-31T13:14:57.470 回答
38

您可以这样做的一种方法是暂停脚本,查看您当前停止的位置后面的代码,例如:

var something = somethingElse.blah;

在控制台中,执行以下操作:

delete somethingElse;

然后播放脚本:尝试访问时会导致致命错误somethingElse,脚本会死掉。瞧,你已经终止了脚本。

编辑:最初,我删除了一个变量。这还不够好。您必须删除 JavaScript 尝试访问其属性的函数或对象。

于 2013-12-31T18:26:43.077 回答
6

debugger如果您在使用语句时遇到这种情况,

debugger;

...然后我认为页面将继续运行,直到 js 运行时产生或下一次中断。假设您处于错误中断模式(暂停图标切换),您可以通过执行以下操作来确保发生中断:

debugger;throw 1;

或者可能调用一个不存在的函数:

debugger;z();

(当然,如果您尝试单步执行函数,这无济于事,但也许您可以在 Sources 面板中动态添加 a throw 1or z()or somesuch,按 ctrl-S 保存,然后按 ctrl-R 刷新...但是可能会跳过一个断点,但如果您处于循环中,则可能会起作用。)

如果您正在执行循环并希望debugger再次触发该语句,则可以直接键入throw 1

throw 1;

然后当你按下 ctrl-R 时,下一个 throw 就会被击中,并且页面会刷新。

(使用 Chrome v38 测试,大约 2017 年 4 月)

于 2017-04-17T20:46:09.027 回答
5

参考@scottndecker 对以下问题的回答,chrome 现在在开发者工具下提供了“禁用 JavaScript”选项:

  • ...右上角垂直(在开发者工具菜单中,不在 Chrome 主菜单中)
  • 设置(在较新的 Chrome 版本中,它在按钮之外单独显示为齿轮...,而不是在按钮下方)
  • 在“首选项”下,转到最底部的“调试器”部分并选择“禁用 JavaScript”

好消息是您可以通过选中/取消选中它来停止并重新运行。

于 2017-05-30T09:15:52.007 回答
3

好问题在这里。我认为你不能终止脚本执行。虽然我从来没有找过它,但我在工作中使用 chrome 调试器已经很长时间了。我通常在我的 javascript 代码中设置断点,然后调试我感兴趣的代码部分。当我完成调试该代码时,我通常只运行程序的其余部分或刷新浏览器。

如果您想阻止脚本的其余部分被执行(例如由于将要进行的 AJAX 调用),您唯一能做的就是在控制台中即时删除该代码,从而防止这些调用从被执行,那么你可以毫无问题地执行剩余的代码。

我希望这有帮助!

PS:我试图在以下一些教程/指南中找到终止执行的选项,但找不到。正如我之前所说,可能没有这样的选择。

http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C

http://www.nsbasic.com/app/tutorials/TT10.htm

于 2012-10-30T08:08:20.487 回答
2

您可以暂停任何我认为在调试此类场景时非常有用的 XHR 模式。

例如,我在包含“/”的 URL 模式上给出了断点

在此处输入图像描述

于 2017-10-02T17:54:47.590 回答
0

如果您有恶意循环,请暂停 Google Chrome 调试器中的代码(||源选项卡中的小“”按钮)。

切换回 Chrome 本身,打开“任务管理器”(Shift+ ESC),选择您的选项卡,单击“结束进程”按钮。

您将收到 Aww Snap 消息,然后您可以重新加载 ( F5)。

正如其他人所指出的那样,在暂停点重新加载页面与重新启动恶意循环相同,并且如果调试器随后也锁定(在某些情况下会导致重新启动 chrome 甚至 PC),可能会导致严重的锁定。调试器需要一个“停止”按钮。Nb:接受的答案已经过时,因为它的某些方面现在显然是错误的。如果你投票给我,请解释:)

于 2017-11-10T16:26:54.727 回答
-1

打开“开发工具”中的源代码选项卡,单击正在运行的脚本中的行号,这将创建一个断点,调试器将在那里中断。

于 2016-05-11T02:28:53.160 回答
-1

这篇文章上面提到了这个问题有很多合适的解决方案,但我发现了一个小技巧,可以插入脚本中或粘贴到 Chrome 控制台(调试器)中来实现它:

jQuery(window).keydown(function(e) { if (e.keyCode == 123) debugger; });

当您点击 时,这将导致执行暂停F12

于 2019-04-20T08:32:42.077 回答