Dart:程序跳过一条线

时间:2014-08-31 05:09:00

标签: dart

我有以下代码。使用allShaders.forEach的清洁版本无法正常工作,因此这是暂时的;这是一个不同的问题。

static loadAndCompileAll(Function onLoad, Function onFail) {
    Function functionQueue = () { onLoad(); };

    for (int i=0; i < allShaders.length; ++i){
        Shader s = allShaders[i];
        Function previous = functionQueue;
        functionQueue = () { s.loadAndCompile(() => previous(), onFail); };
    }

    functionQueue();
}

我遇到的问题是着色器似乎没有加载或编译。调试显示for循环中的最后一行(第7行)未被执行。我可以逐步完成循环的执行,然后在单步执行第6行后,它将返回第4行。我无法弄清楚原因。

目前使用的方法如下:

Shader.loadAndCompileAll(
            () { print("Loaded shaders"); }, 
            () { print("Failed to load shaders"); }
        );

我确实注意到查看调试器中的局部变量onLoadonFail似乎显示为空,即在调试器窗口中,它显示名称onLoad和值()。也许这与它有关?虽然我无法想象为什么会导致它跳过一条线,除非这是一个错误。我是语言和编辑的新手,所以我不知道这是否是一个匿名函数的结果。

1 个答案:

答案 0 :(得分:3)

调试器似乎跳过该行,但调用functionQueue()时调用loadAndCompile()而不是onLoad()。这表示执行赋值语句。 调试器似乎存在问题(我用WebStorm尝试过),函数分配不被认为是一个暂停点。调试器也没有在static loadAndCompileAll的第一行停止。

当您稍微改变代码格式时,至少可以设置调试器在实际调用函数时停止的断点。

static loadAndCompileAll(Function onLoad, Function onFail) {
    Function functionQueue = () { 
      onLoad(); // set breakpoint here
    };

    for (int i=0; i < allShaders.length; ++i){
        Shader s = allShaders[i];
        Function previous = functionQueue;
        functionQueue = () { 
          s.loadAndCompile(() => previous(), onFail); // set breakpoint here
        };
    }

    functionQueue();
}

是否可以在http://dartbug.com/new为此调试程序问题创建错误报告?