在 Google Chrome 调试器中单步执行 JavaScript 代码时,如果我不想继续,如何终止脚本执行?我发现的唯一方法是关闭浏览器窗口。
按“重新加载此页面”会运行其余代码,甚至可以像按 F8“继续”一样提交表单。
更新:
在脚本暂停时按 F5(刷新):
Google Chrome (v22) 运行该脚本。如果脚本提交 HTTP 请求,则会显示该请求的 HTTP 响应。原始页面未刷新。
IE 9 只是冻结。但是 IE 有一个“停止调试”选项,当按下它时(前提是您之前没有按 F5),它会继续在调试器之外运行脚本。
Firebug 的行为与 Chrome 相同。
关闭然后再次打开浏览器窗口并不总是最简单的方法,因为它会终止浏览器会话状态,这可能很重要。你所有的断点也丢失了。
更新(2014 年 1 月):
调试时刷新:
Chrome v31:让脚本在更多断点处运行和停止(但不提交 ajax 请求),然后刷新。
IE 11:刷新什么都不做,但你可以按 F5 继续。
Firefox v26:允许脚本运行但不会在进一步的断点处停止,提交 ajax 请求,然后刷新。
有点进步!
调试时导航到同一页面:
Chrome v31:与刷新相同。
IE 11:脚本终止,新的浏览器会话开始(与关闭和再次打开相同)。
Firefox v26:没有任何反应。
juacala 还提出了一种有效的解决方法。例如,如果您使用 jQuery,从控制台运行 delete $ 将在遇到任何 jQuery 方法时停止执行。我已经在上述所有浏览器中对其进行了测试,并且可以确认它可以正常工作。
更新(2015 年 3 月):
最后,经过 2 年多和近 1 万次浏览,Alexander K 给出了正确答案。谷歌浏览器有自己的任务管理器,可以在不关闭标签本身的情况下终止标签进程,保持所有断点和其他内容完好无损。
我什至跑到 BrowserStack.com 在 Chrome v22 中对其进行测试,发现即使在当时也是如此。
在 IE 或 Firefox 中进行调试时,Juacala 的解决方法仍然很有用。
更新(2019 年 1 月):
Chrome 开发工具最后添加了一种停止脚本执行的正确方法,这很好(虽然有点隐藏)。有关详细信息,请参阅 James Gentes 的答案。
debugger;
,它会立即将内容放入调试器并停止脚本。
在 Chrome 中,有“任务管理器”,可通过 Shift+ESC 或通过
菜单 → 更多工具 → 任务管理器
您可以选择您的页面任务并按“结束进程”按钮结束它。
从 April 2018, you can stop infinite loops in Chrome 开始:
在开发者工具中打开 Sources 面板 (Ctrl+Shift+I**)。单击暂停按钮以暂停脚本执行。
还要注意快捷键:F8 和 Ctrl+\
https://i.stack.imgur.com/8nhl2.png
2020年4月更新
从 Chrome 80 开始,当前的答案都不起作用。没有可见的“暂停”按钮 - 您需要长按“播放”按钮才能访问停止图标:
https://i.stack.imgur.com/68C8K.png
您可以这样做的一种方法是暂停脚本,查看您当前停止的位置后面的代码,例如:
var something = somethingElse.blah;
在控制台中,执行以下操作:
delete somethingElse;
然后播放脚本:尝试访问somethingElse
时会出现致命错误,脚本会死掉。瞧,你已经终止了脚本。
编辑:最初,我删除了一个变量。这还不够好。您必须删除 JavaScript 尝试访问其属性的函数或对象。
you have to delete a function or an object
如此讨厌的 hack! (在 UI 中,它很适合作为 kill all 按钮)
[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 年或以后遇到此问题,则可能是不同的问题、错误回归等]
如果您在使用 debugger
语句时遇到此问题,
debugger;
...然后我认为该页面将永远继续运行,直到 js 运行时产生或下一次中断。假设您处于错误中断模式(暂停图标切换),您可以通过执行以下操作来确保发生中断:
debugger;throw 1;
或者可能调用一个不存在的函数:
debugger;z();
(当然,如果您尝试单步执行函数,这无济于事,但也许您可以在 Sources 面板中动态添加 throw 1
或 z()
或类似的东西,按 ctrl-S 保存,然后按 ctrl-R刷新...但是,这可能会跳过一个断点,但如果您处于循环中,则可能会起作用。)
如果您正在执行循环并希望再次触发 debugger
语句,则只需键入 throw 1
。
throw 1;
然后当你按下 ctrl-R 时,下一个 throw 就会被击中,并且页面会刷新。
(使用 Chrome v38 测试,大约 2017 年 4 月)
参考 @scottndecker 对以下 question 的回答,chrome 现在在开发者工具下提供了“禁用 JavaScript”选项:
Vertical ... 在右上角(在开发者工具菜单中,而不是在 Chrome 主菜单中)
设置(在较新的 Chrome 版本中,除了 ... 按钮之外,它作为齿轮单独可见,而不是在它下面)
在“首选项”下,转到最底部的“调试器”部分并选择“禁用 JavaScript”
好消息是您可以通过选中/取消选中它来停止并重新运行。
好问题在这里。我认为你不能终止脚本执行。虽然我从来没有找过它,但我在工作中使用 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
您可以暂停任何我认为在调试此类场景时非常有用的 XHR 模式。
例如,我在包含“/”的 URL 模式上给出了断点
https://i.stack.imgur.com/F4ZTZ.png
如果您有恶意循环,请暂停 Google Chrome 调试器中的代码(源选项卡中的小“||
”按钮)。
切换回 Chrome 本身,打开“任务管理器”(Shift+ESC),选择您的选项卡,单击“结束进程”按钮。
您将收到 Aww Snap 消息,然后您可以重新加载 (F5)。
正如其他人所指出的那样,在暂停点重新加载页面与重新启动恶意循环相同,并且如果调试器随后也锁定(在某些情况下会导致重新启动 chrome 甚至 PC),可能会导致严重的锁定。调试器需要一个“停止”按钮。 Nb:接受的答案已经过时,因为它的某些方面现在显然是错误的。如果你投票给我,请解释:)。
打开“开发工具”中的源代码选项卡,单击正在运行的脚本中的行号,这将创建一个断点,调试器将在那里中断。
这篇文章上面提到了这个问题有很多合适的解决方案,但我发现了一个小技巧,可以插入脚本中或粘贴到 Chrome 控制台(调试器)中来实现它:
jQuery(window).keydown(function(e) { if (e.keyCode == 123) debugger; });
这将导致在您点击 F12
时暂停执行。
chrome 48
这只会关闭开发工具,不会终止它,重新打开它,您可以看到程序仍在运行(tried setInterval()
)