首页 文章

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

提问于
浏览
152

在Google Chrome调试程序中单步执行JavaScript代码时,如果我不想继续,如何终止脚本执行?我找到的唯一方法是关闭浏览器窗口 .

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

UPDATE

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

  • Google Chrome(v22)运行该脚本 . 如果脚本提交HTTP请求,则会显示该请求的HTTP响应 . 原始页面未刷新 .

  • IE 9刚冻结 . 但是IE有一个选项"Stop Debugging",当按下时(如果你之前没有按F5),继续在调试器外运行脚本 .

  • Firebug的行为与Chrome相同 .

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

UPDATE (Jan 2014)

调试时刷新:

  • Chrome v31:让脚本在更多断点上运行和停止(但不提交ajax请求),然后刷新 .

  • IE 11:刷新什么都不做,但你可以按F5继续 .

  • Firefox v26:让脚本运行但不会停留在更多断点上,提交ajax请求,然后刷新 .

有点进步!

调试时导航到同一页面:

  • Chrome v31:与Refresh相同 .

  • IE 11:脚本终止,新的浏览器会话启动(与关闭和再次打开相同) .

  • Firefox v26:没有任何反应 .

juacala也提出了有效的解决方法 . 例如,如果您使用的是jQuery,则一旦遇到任何jQuery方法,从控制台运行 delete $ 将停止执行 . 我已在所有上述浏览器中对其进行了测试,并确认其正常运行 .

UPDATE (Mar 2015)

最后,经过2年以上和近10K的观看,Alexander K给出了正确的答案 . 谷歌Chrome有自己的任务管理器,可以在不关闭标签本身的情况下终止标签进程,保持所有断点和其他内容不变 .

我甚至到了BrowserStack.com,在Chrome v22中测试它,发现即使在那个时候这也是这样 .

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

12 回答

  • 2

    在Chrome中,有"Task Manager",可通过Shift ESC或通过

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

    您可以选择页面任务,然后按“结束处理”按钮结束它 .

  • 12

    一种方法是暂停脚本,查看当前停止的代码,例如:

    var something = somethingElse.blah;
    

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

    delete somethingElse;
    

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

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

  • 3

    截至April 2018, you can stop infinite loops in Chrome

    • 打开 Sources 面板 .

    • 单击 Pause . 该按钮更改为 Resume Script Execution .

    • Resume Script Execution 然后选择停止当前JavaScript调用 .

  • 159

    请参阅@scottndecker给出的以下question的答案,chrome现在在Developer Tools下提供了一个'disable JavaScript'选项:

    • 垂直 ... 在右上角

    • 设置

    • 并在'Preferences'下,转到最底部的'Debugger'部分并选择'Disable JavaScript'

    好的是你可以通过检查/取消选中它来停止并重新运行 .

  • 1

    好问题在这里 . 我认为你无法终止脚本执行 . 虽然我从来没有找过它,但我一直在使用chrome调试器工作很长时间 . 我通常在我的javascript代码中设置断点,然后调试我感兴趣的代码部分 . 当我完成调试代码时,我通常只运行程序的其余部分或刷新浏览器 .

    如果你想阻止脚本的其余部分被执行(例如由于将要进行的AJAX调用) the only thing you can do is to remove that code in the console on-the-fly, thus preventing those calls from being executed ,那么你可以毫无问题地执行剩余的代码 .

    我希望这有帮助!

    P.S:我试图在一些教程/指南中找到一个终止执行的选项,如下面的那些,但找不到它 . 正如我之前所说,可能没有这样的选择 .

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

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

  • 37

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

    debugger;
    

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

    debugger;throw 1;
    

    或者可能调用一个不存在的函数:

    debugger;z();
    

    (当然,如果你试图逐步执行函数,这没有用,虽然也许你可以在Sources面板中动态添加 throw 1z() 或某些东西,ctrl-S保存,然后ctrl-R刷新.. . 这可能但是跳过一个断点,但是如果你处于循环中则可以工作 . )

    如果您正在进行循环并希望再次触发 debugger 语句,则只需键入 throw 1 即可 .

    throw 1;
    

    然后当你点击ctrl-R时,下一个投掷将被点击,页面将刷新 .

    (使用Chrome v38测试,大约2017年4月)

  • -2

    你可以做到,但你必须先准备好你的代码 .

    Instructions for halting script execution in Google Chrome Dev Tools:

    (1)首先通过创建 global 变量来准备代码:

    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)继续执行脚本 . 当脚本从上面的步骤(2)执行测试时,脚本将会 return false


    笔记:

    (A)这个技巧适用于全局变量和对象,但它不适用于局部变量 . Note that this:
    newVar = 'never used before';
    创建一个窗口对象的新属性(使用上面的技巧), whilst this:
    var newVar = 'never used before';
    创建一个局部变量(不适用于上面的技巧!)

    (B)所以,你仍然可以使用已经运行的代码 if 你有一个全局变量或一个对象,如果它有一个给定的值将返回false .

    (C)在紧要关头,您可以使用juacala的技巧并从DOM中删除元素(在元素选项卡上),这将导致javascript错误 . 例如,假设您有代码 var cartype = $('#cartype').val(); 如果在该行代码之前删除ID = cartype 的元素,那么js将在该行中断 . However, the element will still be missing when you try to re-run the code. 上述技巧可让您无限制地运行和重新运行代码 .


    更多说明:

    (a)在代码中插入断点:只需在一行上输入 debugger; . 如果DevTools处于打开状态,那么脚本将在此时跳转到调试器 . 如果DevTools没有打开,代码将忽略语句 .

    (b)在调试代码时想避免跳进jQuery库吗?黑盒子吧 . 见blackbox instructions for Chrome - 或 - for Firefox


    感恩(请访问和upvote):

    Javascript Debugging line by line using Google Chrome

    Is it possible to change javascript variable values while debugging in Google Chrome?

  • 4

    如果您有恶意循环,请暂停Google Chrome调试器中的代码(在“来源”标签中显示小的“ || ”按钮) .

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

    您将获得Aww Snap消息,然后您可以重新加载(F5) .

    正如其他人所指出的那样,在暂停时重新加载页面与重新启动恶意循环相同,并且如果调试器也会锁定(在某些情况下导致重新启动chrome甚至PC),则会导致令人讨厌的锁定 . 调试器需要一个"Stop"按钮 . Nb:接受的答案是过时的,因为它的某些方面现在显然是错误的 . 如果你投票给我,请解释:) .

  • 0

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

  • 0

    您可以暂停任何XHR模式,我发现在调试这些场景时非常有用 .

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

    enter image description here

  • 3

    我相信James Gentes在2018年的回答是正确的 . 现在当你暂停一个断点时,你可以点击并按住继续按钮,它会弹出一个带有停止按钮的下拉菜单 .

  • 0

    大部分时间我都想停止一个循环或计时器,它正在改变页面上的元素并阻止我检查它们......

    大多数时候它使用jQuery所以我只使用:

    删除jQuery

相关问题