在Google Chrome浏览器中调试时如何终止脚本执行?

2020/10/14 07:01 · javascript ·  · 0评论

在Google Chrome调试器中逐步执行JavaScript代码时,如果不想继续执行脚本,该如何终止脚本执行?我发现的唯一方法是关闭浏览器窗口。

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

更新

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

  • Google Chrome(v22)运行脚本。如果脚本提交了HTTP请求,则显示该请求的HTTP响应。原始页面未刷新。
  • IE 9只是冻结。但是IE有一个选项“ Stop Debugging”(按下“停止调试”)(前提是您之前没有按F5),它将继续在调试器之外运行脚本。
  • Firebug的行为与Chrome相同。

关闭浏览器窗口然后再次打开并不是总是最简单的方法,因为它会终止浏览器会话状态,这可能很重要。您所有的断点也会丢失。

更新(2014年1月)

调试时刷新:

  • Chrome v31:可让脚本运行并在其他断点处停止(但不提交ajax请求),然后刷新。
  • IE 11:刷新没有任何作用,但是您可以按F5继续。
  • Firefox v26:允许脚本运行,但不会在进一步的断点处停止,提交Ajax请求,然后刷新。

有点进步!

调试时导航至同一页面:

  • Chrome v31:与“刷新”相同。
  • IE 11:脚本已终止,新的浏览器会话已启动(与关闭并再次打开相同)。
  • Firefox v26:什么也没发生。

另外,juacala建议了有效的解决方法。例如,如果您使用的是jQuery,则一旦遇到任何jQuery方法,从控制台运行delete $将停止执行。我已经在所有上述浏览器中对其进行了测试,并且可以确认它是否正常运行。

更新(2015年3月)

最终,经过2年多的浏览量和近1万次浏览,Alexander K给出了正确的答案。Google Chrome浏览器具有自己的任务管理器,可以关闭制表符进程而无需关闭制表符本身,而使所有断点和其他内容保持完整。

我什至在BrowserStack.com上用Chrome v22对其进行了测试,发现即使在那时,这种方式也能正常工作。

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

更新(2019年1月)

最后,Chrome开发者工具添加了一种停止脚本执行的正确方法,这很好(尽管有些隐蔽)。有关详细信息,请参阅James Gentes的答案。

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

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

您可以选择页面任务并按“结束进程”按钮结束它。

2018年4月起,您可以在Chrome中停止无限循环

  1. 在开发人员工具(+ + **)中打开“源”面板CtrlShiftI
  2. 单击“暂停”按钮以暂停脚本执行

另请注意快捷键:F8Ctrl+\

在此处输入图片说明

一种实现方法是暂停脚本,查看当前停止的位置后面的代码,例如:

var something = somethingElse.blah;

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

delete somethingElse;

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

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

2020年4月更新

从Chrome 80开始,当前的答案均无效。没有可见的“暂停”按钮-您需要长按“播放”按钮以访问“停止”图标:

停止在Chrome DevTools中执行脚本

如果您在使用debugger语句时遇到此问题

debugger;

...然后,我认为该页面将永远继续运行,直到js运行时产生或下一个中断为止。假设您处于错误中断模式(暂停图标切换),则可以通过执行以下操作来确保中断发生:

debugger;throw 1;

或调用不存在的函数:

debugger;z();

(当然,如果您尝试逐步使用函数,这无济于事,尽管也许可以在“源”面板中动态添加throw 1z()或类似的东西,保存ctrl-S,然后刷新ctrl-R ...但是可能会跳过一个断点,但如果您处于循环状态,则可能会起作用。)

如果您正在执行循环并希望debugger再次触发该语句,则可以直接键入throw 1

throw 1;

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

(已测试Chrome v38,于2017年4月左右)

好问题在这里。我认为您无法终止脚本执行。尽管我从未寻找过它,但是我已经在使用Chrome调试器了很长时间了。我通常在javascript代码中设置断点,然后调试感兴趣的部分代码。完成调试代码后,通常只运行程序的其余部分或刷新浏览器。

如果您想阻止脚本的其余部分执行(例如,由于将要进行的AJAX调用),您唯一可以做的就是在控制台中即时删除该代码,从而防止这些调用从执行开始,那么您可以执行其余代码而不会出现问题。

我希望这有帮助!

PS:我尝试在以下类似的一些教程/指南中找到终止执行的选项,但找不到它。正如我之前所说,可能没有这种选择。

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

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

参照@scottndecker对以下问题的回答,chrome现在在开发人员工具下提供了“禁用JavaScript”选项:

  • ...右上垂直
  • 设定值
  • 在“首选项”下,转到最底部的“调试器”部分,然后选择“禁用JavaScript”

好的事情是,您可以仅通过选中/取消选中它来停止并重新运行。

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

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

在此处输入图片说明

如果存在恶意循环,请在Google Chrome调试器中暂停代码(“||源”标签中的小“ ”按钮)。

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

您将收到Aww Snap消息,然后可以重新加载(F5)。

正如其他人指出的那样,在暂停时重新加载页面与重新启动恶意循环相同,并且如果调试器随后也锁定(在某些情况下会导致重新启动chrome甚至是PC),则可能导致讨厌的锁定。调试器需要一个“停止”按钮。Nb:公认的答案已经过时,因为它的某些方面现在显然是错误的。如果您不赞成我,请解释一下:)

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

如上所述,对于此问题,有许多适当的解决方案,但是我发现了一个可以在脚本中插入或粘贴在Chromes控制台(调试器)中的小型hack来实现:

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

按下时,这将导致执行暂停F12

本文地址:http://javascript.askforanswer.com/zaigoogle-chromeliulanqizhongdiaoshishiruhezhongzhijiaobenzhixing.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!