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

时间:2012-04-19 14:14:16

标签: javascript debugging browser google-chrome-devtools

假设我有这个功能:

function test () {

    // statements 1

    statement_X;

    // statements 2

}

我正在使用浏览器的开发工具来处理这些语句。现在,当我暂停“statement_X”时,我想终止函数执行(我不希望执行函数的“语句2”部分),就好像“statement_X”紧跟其后一样return;声明。

我知道Chrome有内联脚本编辑,所以我可以在暂停的语句之后手动添加return语句,然后点击CTRL + S重新执行整个事情,但我也需要IE的这个功能,所以我是希望得到一般解决方案。

提前终止执行似乎是一件容易的事情(对于浏览器),所以我期望开发工具提供这样的功能。

enter image description here

2 个答案:

答案 0 :(得分:2)

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

如果函数的最后一行有任何其他语句,如下面的代码所示,请注意右键单击大括号以使此技术起作用。

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

对于内联函数或者不用于调试的缩小脚本,有时可能需要这样做。

答案 1 :(得分:0)

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

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

这些人使用eval()(最终)来运行注入的代码。浏览Chrome检查器时,调试器代码最终会在您尝试评估某些内容时调用此代码(我认为):

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: Illegal return statement

所以不,没有伏都教回报声明。