如何在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

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

你可以做到这一点,但你必须先准备好你的代码。

在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