在Google Chrome调试程序中单步执行JavaScript代码时,如果我不想继续,如何终止脚本执行?我找到的唯一方法是关闭浏览器窗口。
按“重新加载此页面”将运行其余代码,甚至提交表单,就像按F8“继续”一样。
更新:
在脚本暂停时按F5(刷新):
关闭然后再次打开浏览器窗口并不总是下一个最简单的方法,因为它会终止浏览器会话状态,这可能很重要。你的所有断点都会丢失。
更新(2014年1月):
调试时刷新:
有点进步!
调试时导航到同一页面:
juacala也提出了有效的解决方法。例如,如果您使用的是jQuery,则在遇到任何jQuery方法后,从控制台运行delete $将停止执行。我已在所有上述浏览器中对其进行了测试,并确认其正常运行。
更新(2015年3月):
最后,经过2年以上和近10K的观看,Alexander K给出了正确的答案。谷歌Chrome有自己的任务管理器,它可以在不关闭标签本身的情况下终止标签进程,保持所有断点和其他内容不变。
我甚至到了BrowserStack.com,在Chrome v22中测试它,发现即使在那个时候这种方式也是如此。
在IE或Firefox中进行调试时,Juacala的解决方法仍然有用。
更新(2019年1月):
Chrome Dev Tools最后添加了一种正确的方法来停止脚本执行,这很好(虽然有点隐藏)。有关详细信息,请参阅James Gentes的答案。
在Chrome中,有“任务管理器”,可通过Shift + ESC或通过
菜单→更多工具→任务管理器
您可以选择页面任务,然后按“结束处理”按钮结束它。
你可以暂停任何我认为在调试这些场景时非常有用的XHR模式。
例如,我在包含“/”的URL模式上给出了断点
jQuery(window).keydown(function(e) { if (e.keyCode == 123) debugger; });
对于这个问题有很多合适的解决方案,如上所述,但是我发现了一个小的hack,可以在脚本中插入或粘贴在Chromes控制台(调试器)中来实现它:
F12
当你点击qazxswpoi时,这将导致暂停执行。
大部分时间我都想停止一个循环或计时器,它正在改变页面上的元素并阻止我检查它们......
大多数时候它使用jQuery所以我只使用:
删除jQuery
从April 2018, you can stop infinite loops in Chrome:
一种方法是暂停脚本,查看当前停止的代码,例如:
var something = somethingElse.blah;
在控制台中,执行以下操作:
delete somethingElse;
然后播放脚本:当它尝试访问somethingElse
时会导致致命错误,脚本将会死亡。瞧,你已经终止了剧本。
编辑:最初,我删除了一个变量。这还不够好。您必须删除JavaScript尝试访问属性的函数或对象。
请参阅@scottndecker给出的以下question的答案,chrome现在在Developer Tools下提供了“禁用JavaScript”选项:
...
好的是你可以通过检查/取消选中它来再次停止并重新运行。
好问题在这里。我认为你无法终止脚本执行。虽然我从来没有找过它,但我一直在使用chrome调试器工作很长时间。我通常在我的javascript代码中设置断点,然后调试我感兴趣的代码部分。当我完成调试代码时,我通常只运行程序的其余部分或刷新浏览器。
如果你想阻止脚本的其余部分被执行(例如由于将要进行的AJAX调用),你唯一能做的就是在控制台中即时删除那些代码,从而阻止这些调用从被执行,然后你可以没有问题地执行剩余的代码。
我希望这有帮助!
P.S:我试图在一些教程/指南中找到一个终止执行的选项,如下所示,但找不到它。正如我之前所说,可能没有这样的选择。
http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C
如果您在使用debugger
语句时遇到此问题,
debugger;
...然后我认为该页面将继续运行,直到js运行时产生或下一次休息。假设您处于突破错误模式(暂停图标切换),您可以通过执行以下操作来确保中断:
debugger;throw 1;
或者可能调用一个不存在的函数:
debugger;z();
(当然,如果你试图逐步执行函数,这没有任何帮助,尽管你可以在Sources面板中动态添加throw 1
或z()
或者某些东西,ctrl-S保存,然后ctrl-R刷新..但是,这可能会跳过一个断点,但如果你处于循环中,它可能会起作用。)
如果你正在做一个循环并期望再次触发debugger
语句,你可以改为输入throw 1
。
throw 1;
然后当你点击ctrl-R时,下一个投掷将被点击,页面将刷新。
(使用Chrome v38测试,大约2017年4月)
你可以这样做,但你必须先准备好你的代码。
在Google Chrome开发工具中暂停脚本执行的说明:
(1)首先通过创建全局变量来准备代码:
var devquit=0;
$(document).ready({
//the rest of your code
(2)您可能希望退出的任何地方,测试此变量的值:
//Lotsa code
if (devquit > 0) return false;
(3)在上述测试行之前或之前暂停执行脚本
(4)切换到控制台
(5)类型:
> devquit
0
> devquit=1 <=== only this line is necessary
> devquit
1
(6)继续执行脚本。当return false
从上面的步骤(2)执行测试时,脚本将是newVar = 'never used before';
笔记:
(A)这个技巧适用于全局变量和对象,但它不适用于局部变量。请注意:
var newVar = 'never used before';
创建一个窗口对象的新属性(使用上面的技巧),同时:
var cartype = $('#cartype').val();
创建一个局部变量(不适用于上面的技巧!)
(B)因此,如果您有一个全局变量或一个如果它具有给定值将返回false的对象,您仍然可以将此技巧用于已经运行的代码。
(C)在紧要关头,您可以使用juacala的技巧并从DOM中删除元素(在元素选项卡上),这将导致javascript错误。例如,假设您有代码cartype
如果在该行代码之前删除ID = debugger;
的元素,则js将在该行中断。但是,当您尝试重新运行代码时,该元素仍将丢失。上述技巧允许您无限制地运行和重新运行代码。
更多说明:
(a)在代码中插入断点:只需在一行上输入blackbox instructions for Chrome。如果DevTools处于打开状态,那么脚本将在此时跳转到调试器。如果DevTools没有打开,代码将忽略语句。
(b)在调试代码时想避免跳进jQuery库吗?黑盒子吧。见for Firefox - 或 - Javascript Debugging line by line using Google Chrome
感恩(请访问和upvote):
Is it possible to change javascript variable values while debugging in Google Chrome?
||
打开“开发者工具”中的源选项卡,单击正在运行的脚本中的行号,这将创建一个断点,调试器将在那里中断。