9

假设我有这个功能:

function test () {

    // statements 1

    statement_X;

    // statements 2

}

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

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

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

在此处输入图像描述

4

2 回答 2

3

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

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

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

这有时在内联函数的情况下是必要的,或者在不用于调试的缩小脚本中。

于 2012-04-24T23:00:38.893 回答
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

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

于 2012-04-22T14:17:07.987 回答