2014-08-31 3 views
2

다음 코드가 있습니다. 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이고 값은 ()입니다. 어쩌면 그것과 관련이있는 것일까 요? 비록 그것이 버그가 아니라면 왜 그것이 그 라인을 건너 뛰게되는지를 상상할 수는 없지만. 저는 언어와 편집자가 처음이므로 익명의 기능인 결과인지는 모르겠습니다.

답변

3

디버거가 줄을 건너 뛰는 것 같지만 functionQueue()이 호출되면 onLoad() 대신 loadAndCompile()이 호출됩니다. 할당 문이 실행되었음을 나타냅니다. 기능 할당이 중단 점으로 인식되지 않는 디버거 (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에서 버그 보고서를 만들시겠습니까?

+0

감사합니다. 이것은 응용 프로그램이 실제로'functionQueue'를 호출한다는 것을 의미합니까, 나는 그것을 관찰 할 수 없습니까? – esel

+0

내가 그것을 시도했을 때 그것을 부르고 있었다. 또한 코드가 내 대답과 같이 형식화되어있을 때 ** 함수 본문 ** 줄에 중단 점을 설정할 때이 함수가 호출되고 있음을 알 수 있습니다. 한 줄에 더 많은 명령문이 있으면 디버거는 첫 번째 명령문에서만 중단됩니다 (이 경우 첫 번째 명령문에서조차도). –

+1

그래, 나는 그 질문을 쓴 후에 그것을 깨달았다. 버그 보고서를 만들었습니다. https://code.google.com/p/dart/issues/detail?id=20762 추가 정보가 필요하다고 생각되면 알려 주시기 바랍니다. – esel

관련 문제