如何终止脚本执行时调试谷歌Chrome?

当在谷歌Chrome调试器中逐步通过JavaScript代码时,如果我不想继续,我如何终止脚本执行?我找到的唯一办法就是关闭浏览器窗口。

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

更新:

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

  • 谷歌Chrome (v22)运行该脚本。如果脚本提交了HTTP请求,则会显示该请求的HTTP响应。未刷新原始页面。
  • IE 9死机了。但是IE有一个选项“停止调试”,当按下(假设你之前没有按F5),继续在调试器外运行脚本。
  • Firebug的行为与Chrome相同。
关闭然后再打开浏览器窗口并不总是下一个最简单的方法 因为它会杀死浏览器会话状态,这可能很重要。

更新(2014年1月):

调试时刷新:

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

有点进步!

调试时导航到同一页面:

  • Chrome v31:与刷新相同。
  • ie11:终止脚本,启动新的浏览器会话(和关闭再打开一样)。
  • Firefox v26:什么都没有发生。

juacala也提出了一个有效的解决方案。例如,如果你正在使用jQuery,从控制台运行删除美元将在遇到任何jQuery方法时停止执行。我已经在以上所有浏览器中进行了测试,可以确认它是工作的。

更新(2015年3月):

最后,经过2年多的时间和近10K的观看,正确的答案是由亚历山大K.谷歌Chrome有自己的任务管理器,可以杀死一个标签进程没有关闭标签本身,保持所有的断点和其他东西完好无损。

我甚至去了BrowserStack.com在Chrome v22中测试它,发现即使在那个时候它也是这样工作的。

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

更新(2019年1月):

Chrome开发工具最后增加了一个适当的方法来停止脚本执行,这是很好的(虽然有点隐藏)。详情请参考James Gentes的回答。

234984 次浏览

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

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

我希望这能有所帮助!

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

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

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

一种方法是暂停脚本,看看你当前停止的地方后面有什么代码,例如:

var something = somethingElse.blah;

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

delete somethingElse;

然后播放脚本:当它试图访问somethingElse时,将导致致命错误,并且脚本将死亡。瞧,你已经终止了脚本。

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

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

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

您可以选择您的页面任务,并通过按“end Process”按钮结束它。

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

[2022年编辑:这被报道为https://bugs.chromium.org/p/chromium/issues/detail?id=774852https://bugs.chromium.org/p/chromium/issues/detail?id=1112863在2017年,最近才被标记为固定5年后,所以如果你仍然遇到这种情况,你应该更新Chrome(通常保持更新)。如果你在2023年或以后遇到这个问题,它可能是一个不同的问题,bug回归等。

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

debugger;

... 那么我认为这个页面会一直运行下去,直到js运行时产生,或者下一次中断。假设你在错误中断模式(暂停图标切换),你可以通过这样做来确保中断发生:

debugger;throw 1;

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

debugger;z();

(当然,如果你试图逐步遍历函数,这没有帮助,尽管也许你可以动态地在Sources面板中添加throw 1z()之类的,按ctrl-S保存,然后按ctrl-R刷新……然而,这可能会跳过一个断点,但如果您处于循环中,则可以工作。)

如果你正在进行循环,并希望再次触发debugger语句,你可以只输入throw 1

throw 1;

然后,当您按下ctrl-R时,下一次抛出将被命中,页面将刷新。

(在Chrome v38上测试,大约2017年4月)

参考@scottndecker给出的以下问题的答案,chrome现在在开发人员工具下提供了一个“禁用JavaScript”选项:

  • 右上方的垂直...(在开发人员工具菜单中,而不是Chrome主菜单中)
  • 设置(在较新的Chrome版本中,它在...按钮之外单独作为齿轮可见,而不是在它下面)
  • 在“首选项”下找到最底部的“调试器”部分然后选择“禁用JavaScript”

好在您可以通过检查/取消检查来停止并重新运行它。

您可以暂停任何XHR模式,我发现在调试这类场景时这非常有用。

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

enter image description here

如果你有一个流氓循环,暂停代码在谷歌Chrome调试器(小“||”按钮,而在来源选项卡)。

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

你会得到Aww Snap消息,然后你可以重新加载(F5)。

正如其他人所注意到的,在暂停时重新加载页面与重新启动流氓循环是一样的,如果调试器也被锁定,则会导致严重的锁定(在某些情况下导致重新启动chrome甚至PC)。调试器需要一个“Stop”按钮。注:这个公认的答案已经过时了,因为它的某些方面现在显然是错误的。如果你投了我的反对票,请解释一下:)

2018年4月,你可以在Chrome中停止无限循环开始:

  1. 在开发人员工具中打开来源面板(Ctrl+转变+**)。
  2. 单击暂停按钮到暂停脚本执行

还要注意快捷键:F8Ctrl+

enter image description here

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

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

这将导致执行在你点击F12时暂停。

2020年4月更新

截至Chrome 80,当前的答案都不能工作。没有可见的“暂停”按钮-你需要长按“播放”按钮才能进入“停止”图标:

Stop script execution in Chrome DevTools

  1. 转到Sources选项卡并选择Filesystem子选项卡

Add folder截图

  1. 选择一个文件夹,其中包含要执行的文件
  2. 接受文件夹访问请求
  3. 选择要执行的文件

Select file截图

  1. 在要执行的文件中放置断点
  2. 点击“暂停脚本执行”选项;

断点和暂停截图

  1. 在人民币上下文菜单中选择复制链接地址选项

Copy link address截图

  1. 将复制的地址粘贴到浏览器地址栏以打开该文件
  2. 文件执行将在断点处停止