我有以下代码。使用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"); }
);
我确实注意到查看调试器中的局部变量onLoad
和onFail
似乎显示为空,即在调试器窗口中,它显示名称onLoad
和值()
。也许这与它有关?虽然我无法想象为什么会导致它跳过一条线,除非这是一个错误。我是语言和编辑的新手,所以我不知道这是否是一个匿名函数的结果。
答案 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为此调试程序问题创建错误报告?