当在谷歌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,运行delete $ from console命令会在遇到任何jQuery方法时停止执行。我已经在以上所有浏览器中进行了测试,可以确认它是工作的。
更新(2015年3月):
最后,经过2年多的时间和近10K的浏览,Chrome有自己的任务管理器,可以杀死一个标签进程而不关闭标签本身,保持所有的断点和其他东西完好无损。
我甚至去了BrowserStack.com在Chrome v22中测试它,发现即使在那个时候它也是这样工作的。
在IE或Firefox中调试时,Juacala的解决方案仍然很有用。
更新(2019年1月):
Chrome开发工具最后增加了一个适当的方法来停止脚本执行,这是很好的(虽然有点隐藏)。详情请参考James Gentes的回答。
[2022年编辑:这在2017年被报道为https://bugs.chromium.org/p/chromium/issues/detail?id=774852和https://bugs.chromium.org/p/chromium/issues/detail?id=1112863,最近在5年后被标记为固定,所以如果你仍然遇到这个问题,你应该更新Chrome(通常保持更新)。如果你在2023年或以后遇到这个问题,它可能是一个不同的问题,bug回归等。
如果在使用调试器语句时遇到这种情况,
debugger;
... 那么我认为这个页面会一直运行下去,直到js运行时产生,或者下一次中断。假设你在错误中断模式(暂停图标切换),你可以通过这样做来确保中断发生:
debugger;throw 1;
或者调用一个不存在的函数:
debugger;z();
(当然,如果您尝试逐个函数,这没有帮助,尽管也许您可以在Sources面板中动态添加throw 1或z()或诸如此类的东西,按ctrl-S保存,然后按ctrl-R刷新……然而,这可能会跳过一个断点,但如果您处于循环中,则可以工作。)
如果正在执行循环,并希望再次触发调试器语句,则只需输入throw 1即可。
throw 1;
然后,当您按下ctrl-R时,下一次抛出将被命中,页面将刷新。
(在Chrome v38上测试,大约2017年4月)
[2022年编辑:这在2017年被报道为https://bugs.chromium.org/p/chromium/issues/detail?id=774852和https://bugs.chromium.org/p/chromium/issues/detail?id=1112863,最近在5年后被标记为固定,所以如果你仍然遇到这个问题,你应该更新Chrome(通常保持更新)。如果你在2023年或以后遇到这个问题,它可能是一个不同的问题,bug回归等。
如果在使用调试器语句时遇到这种情况,
debugger;
... 那么我认为这个页面会一直运行下去,直到js运行时产生,或者下一次中断。假设你在错误中断模式(暂停图标切换),你可以通过这样做来确保中断发生:
debugger;throw 1;
或者调用一个不存在的函数:
debugger;z();
(当然,如果您尝试逐个函数,这没有帮助,尽管也许您可以在Sources面板中动态添加throw 1或z()或诸如此类的东西,按ctrl-S保存,然后按ctrl-R刷新……然而,这可能会跳过一个断点,但如果您处于循环中,则可以工作。)
如果正在执行循环,并希望再次触发调试器语句,则只需输入throw 1即可。
throw 1;
然后,当您按下ctrl-R时,下一次抛出将被命中,页面将刷新。
(在Chrome v38上测试,大约2017年4月)