Javascript 当在浏览器的开发工具中的语句上暂停时,如何在该语句之后立即终止执行?

Javascript 当在浏览器的开发工具中的语句上暂停时,如何在该语句之后立即终止执行?,javascript,debugging,browser,google-chrome-devtools,Javascript,Debugging,Browser,Google Chrome Devtools,假设我有这个函数: function test () { // statements 1 statement_X; // statements 2 } 我正在使用浏览器的开发工具逐步浏览这些语句。现在,当我在语句_X处暂停时,我想终止函数执行,我不想执行函数的语句2部分,就好像语句_X后面紧跟着一个返回;声明 我知道Chrome有内联脚本编辑功能,所以我可以在暂停的语句后手动添加return语句,然后按CTRL+S来重新执行整个操作,但是我也需要IE的这个功能,

假设我有这个函数:

function test () {

    // statements 1

    statement_X;

    // statements 2

}
我正在使用浏览器的开发工具逐步浏览这些语句。现在,当我在语句_X处暂停时,我想终止函数执行,我不想执行函数的语句2部分,就好像语句_X后面紧跟着一个返回;声明

我知道Chrome有内联脚本编辑功能,所以我可以在暂停的语句后手动添加return语句,然后按CTRL+S来重新执行整个操作,但是我也需要IE的这个功能,所以我希望有一个通用的解决方案

对于浏览器来说,提前终止执行似乎是一件非常容易的事情,因此我希望开发工具能够提供这样的功能


如果我理解正确,你不能这样做

调试器Chrome的调试器本身无论如何都是基于javascript的

这些人使用evalevental来运行注入的代码。通过浏览Chrome inspector,当您尝试评估我认为的内容时,调试器代码似乎最终会调用此代码:

function (evalFunction, object, expression, isEvalOnCallFrame, injectCommandLineAPI)
{
    // Only install command line api object for the time of evaluation.
    // Surround the expression in with statements to inject our command line API so that
    // the window object properties still take more precedent than our API functions.

    try {
        if (injectCommandLineAPI && inspectedWindow.console) {
            inspectedWindow.console._commandLineAPI = new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? object : null);
            expression = "with ((window && window.console && window.console._commandLineAPI) || {}) {\n" + expression + "\n}";
        }
        return evalFunction.call(object, expression);
    } finally {
        if (injectCommandLineAPI && inspectedWindow.console)
            delete inspectedWindow.console._commandLineAPI;
    }
}
evalFunction只是eval的别名

问题是,我们不能在eval中使用return语句,即使在硬代码中也是如此。它将始终为您提供SyntaxError:非法返回语句


所以没有,没有巫毒返回语句。

我在IE 9中成功地测试了这一点,所以我将它作为一个答案发布在这里:在脚本调试器中暂停语句_X时,点击F10使语句_X仍然被执行,然后右键单击封闭函数的最后一行,即终止函数体的带有右花括号的行},然后从下拉菜单中选择“设置下一条语句”。这将跳过执行,直到函数结束,就像在语句_X之后有一个void return语句一样

如果函数的最后一行有任何其他语句,如下面的代码所示,请小心右键单击花括号,以使此技术正常工作

function test () { alert("statement 1");
    alert("statement 2"); } function test2 () { alert("statement 3"); }

这在内联函数或不用于调试的小型脚本中有时是必要的。

首先,在Chrome中,可以在暂停的语句之后插入一个return语句,然后按CTRL+S重新运行代码。我在问题中提到了这一点,这就是我要找的。理想情况下,我希望在调试器中有一个方便的终止按钮,这样我就不必手动插入返回语句并一直执行CTRL+S。问题是我希望IE中的这个功能没有热插拔内联代码编辑…@Šime看起来像是通过本机函数实现的。因为Chrome的调试器是HTML,所以我可以为Chrome编写一个用户脚本,添加一个按钮。不过我不确定。IE中没有。你是想停止这个特定函数的执行还是调试?@rcdmk还是调试?什么意思?还是调试器?否,调试器应不受此影响。我想停止函数的执行。然后,我认为你在这方面没有运气,就像Manishearth指出的那样。在FireBug中尝试过,但认为它不可能。设置下一个语句?酷:你说的最后一段是什么意思?@ŠimeVidas:哇!那真是又快又脏。刚才添加了一些解释,现在应该清楚了。@ft我尝试了你的代码,我必须将插入符号放在大括号之前。在大括号后单击会出现一个错误弹出窗口,提示无法将下一条语句设置到此位置。这是有意义的,因为大括号后面的区域不是当前函数执行的一部分,而是未执行的外部范围的一部分。因此,只要单击大括号前的空格,就应该可以了。@ŠimeVidas好的,我明白了。如果您愿意,请随意编辑答案。谢谢你接受。