如何在Google Chrome中进行debugging时终止脚本执行?
在Google Chromedebugging器中逐句通过JavaScript代码时,如果我不想继续执行脚本执行,该如何终止脚本执行? 我发现的唯一方法是closures浏览器窗口。
按下“重新加载此页面”运行代码的其余部分,甚至提交表格,就像按F8“继续”一样。
更新 :
脚本暂停时按F5(刷新):
- Google Chrome(v22)运行脚本。 如果脚本提交了HTTP请求,则会显示该请求的HTTP响应。 原始页面不刷新。
- IE 9只是冻结。 不过,IE有一个“停止debugging”的选项,按下后(前面没有按F5),继续在debugging器外运行脚本。
- Firebug的行为与Chrome相同。
closures然后再次打开浏览器窗口并不总是下一个最简单的方法,因为它会终止浏览器会话状态,这可能很重要。 所有的断点也都丢失了。
更新(2014年1月) :
在debugging时刷新:
- Chrome v31:允许脚本运行并在更多断点处停止(但不提交ajax请求),然后刷新。
- IE 11:刷新什么都不做,但可以按F5继续。
- Firefox v26:允许脚本运行,但不会停在进一步的断点上,提交ajax请求,然后刷新。
一种进步!
在debugging时导航到相同的页面:
- Chrome v31:与刷新相同。
- IE 11:脚本被终止,新的浏览器会话被启动(和closures和再次打开一样)。
- Firefox v26:没有任何反应。
juacala也提出了一个有效的解决方法。 例如,如果您正在使用jQuery,则在遇到任何jQuery方法时,从控制台运行delete $将会停止执行。 我已经在上面的所有浏览器中testing过,并且可以确认它正在工作。
更新(2015年3月) :
最后,经过2年的时间,近10K的观点,正确的答案是由亚历山大K.谷歌浏览器有自己的任务pipe理器,可以杀死一个选项卡进程, 而不closures标签本身,保持所有的断点和其他东西完好无损。
我甚至在BrowserStack.com上使用Chrome v22进行testing,发现这种方式即使在当时也是如此。
在IE或Firefox中debugging时,Juacala的解决方法仍然很有用。
在Chrome中,有“任务pipe理器”,可以通过Shift + ESC或通过
菜单→更多工具→任务pipe理器
您可以select您的页面任务,并按“结束进程”button结束它。
一种方法是暂停脚本,查看当前停止的代码,例如:
var something = somethingElse.blah;
在控制台中,执行以下操作:
delete somethingElse;
然后播放脚本:当它尝试访问somethingElse
时会导致一个致命错误,脚本将会死亡。 瞧,你已经终止了剧本。
编辑:最初,我删除了一个variables。 这还不够好。 您必须删除JavaScript尝试访问属性的函数或对象。
这里好问题。 我认为你不能终止脚本执行。 虽然我从来没有找过它,但我一直在使用chromedebugging器很长一段时间。 我通常在我的javascript代码中设置断点,然后debugging我感兴趣的部分代码。当我完成debugging代码时,通常只运行程序的其余部分或刷新浏览器。
如果你想阻止脚本的其他部分被执行(例如,由于要进行AJAX调用) ,你唯一可以做的就是在控制台中即时删除这些代码,从而防止这些调用从执行 ,然后你可以执行其余的代码没有问题。
我希望这有帮助!
PS:我试图找出一些选项来终止一些教程/指南,如下所示,但找不到它。 正如我之前所说,可能没有这样的select。
http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C
你可以做到这一点,但你必须先准备好你的代码。
在Google Chrome开发工具中停止脚本执行的说明:
(1)通过创build一个全局variables来准备你的代码:
var devquit=0; $(document).ready({ //the rest of your code
(2)你可能希望退出的任何地方,testing这个variables的值:
//Lotsa code if (devquit > 0) return false;
(3)在上述testing线上或之前暂停执行脚本
(4)切换到控制台
(5)types:
> devquit 0 > devquit=1 <=== only this line is necessary > devquit 1
(6)继续脚本执行。 执行上述步骤(2)的testing时,脚本将return false
笔记:
(A)这个技巧适用于全局variables和对象,但是它不适用于局部variables。 请注意这一点:
newVar = 'never used before';
创build窗口对象的新属性(与上面的技巧一起工作), 而这个:
var newVar = 'never used before';
创build一个局部variables(不适用于上面的技巧!)
(B)所以, 如果你有一个全局variables或者一个对象,如果它有一个给定的值,它将返回false,你仍然可以在已经运行的代码中使用这个技巧。
(C)在一个捏,你可以使用juacala的技巧,并删除DOM元素(在元素选项卡),这将导致一个JavaScript错误。 例如,假设你有代码var cartype = $('#cartype').val();
如果在该行代码之前删除ID = cartype
的元素,那么js将在该行上中断。 但是,当您尝试重新运行代码时,元素仍然会丢失。 上面描述的技巧可以让你无限地运行和重新运行代码。
更多笔记:
(a)将断点插入代码中:只需键入debugger;
在一条线上。 如果DevTools处于打开状态,那么脚本将跳转到debugging器中。 如果DevTools未打开,代码将忽略语句。
(二)在debugging代码时,要避免跳入jQuery库? 黑盒子吧。 请参阅适用于Chrome的黑匣子说明 – 或 – 适用于Firefox
感谢(请访问和upvote):
Javascript使用Google Chrome逐行debugging
在Google Chrome中进行debugging时,是否可以更改javascriptvariables值?
如果在使用debugger
语句时遇到此问题,
debugger;
…然后我认为这个页面会一直运行,直到js运行时产生,或者下一个rest。 假设您处于错误模式(暂停图标切换),您可以通过执行如下操作来确保发生中断:
debugger;throw 1;
或者可能调用一个不存在的函数:
debugger;z();
(当然,如果你正在尝试遍历函数,这并没有什么帮助,虽然也许你可以dynamic添加一个throw 1
或者z()
或者其他的在Sources面板中,按ctrl-S来保存,然后ctrl-R刷新…这可能会跳过一个断点,但如果你在一个循环中可能会工作。)
如果您正在执行一个循环,并希望再次触发debugger
语句,则可以只inputthrow 1
。
throw 1;
然后当你点击ctrl-R时,下一个点击会被点击,页面将会刷新。
(testing与Chrome v38,大约2017年4月)
打开“开发工具”中的源代码标签,点击正在运行的脚本中的行号,这将创build一个断点,debugging器将在那里打破。
参考@scottndecker给出的以下问题的答案,chrome现在在开发工具下提供了一个“禁用JavaScript”选项:
- 垂直
...
在右上angular - 设置
- 在“首选项”下,进入最下方的“debugging器”部分,select“禁用JavaScript”
好东西是你可以停下来再次运行,只需通过检查/取消选中它。
您可以暂停任何XHR模式,我觉得在debugging这些场景时非常有用。
例如,我给了一个包含“/”的URL模式的断点
如果您有恶意循环,请暂停Google Chromedebugging器中的代码(“Sources”选项卡中的小“ ||
”button)。
切换回Chrome本身,打开“任务pipe理器”(Shift + ESC),select你的选项卡,点击“结束进程”button。
您将获得Aww Snap消息,然后您可以重新加载(F5)。
正如其他人所指出的那样,在暂停时重新加载页面与重新启动恶意循环相同,如果debugging器也被locking(在某些情况下导致重新启动chrome甚至PC),可能会导致令人讨厌的locking。 debugging器需要一个“停止”button。 铌:被接受的答案已经过时,因为它的某些方面显然是错误的。 如果你给我投票,请解释一下:) 。
大多数时候,我正在寻找停止一个循环或计时器,正在改变网页上的元素,并阻止我检查他们…
大多数时候它使用jQuery,所以我只是使用:
删除jQuery