2012-12-07 3 views
4

페이지를 탐색 할 때 WinJS 응용 프로그램에서 임의의 충돌이 발생합니다.크래시가 발생하지 않는 WinJS 앱

문제는 응용 프로그램이 Visual Studio 디버거에 연결될 때 이러한 충돌이 발생하지 않는다는 것입니다. 그래서 나는 그들이 어디에서 왔는지 찾을 수 없다.

WinJS.Application.onerror 이벤트를 사용하여 충돌을 방지하고 어떤 일이 벌어 지는지 기록하지만 무작위 예외로 시도 할 때 제대로 작동하므로 내 "uncatchable"충돌로이 이벤트가 발생하지 않습니다. 아무 것도 기록하지 마십시오).

이러한 문제를 일으킬 수있는 원인이나 해결 방법에 대한 자세한 정보가 있습니까?

답변

5

때때로 내 응용 프로그램에서 winjs를 사용하지 않는 페이지에서 iframe에 문제가 발생하여 여러 가지 이유로 WinJS.Application.onerror 오류가 발생하지 않을 수 있습니다.

그런 일이

이 오류는이 링크에 발견 "관리 이벤트"

에서 이벤트 로그에서 찾을 수 있습니다 : 나는 이동하면 http://www.davepaquette.com/archive/2012/09/15/windows-8-store-app-crash-logs.aspx

+0

고마워요. – wukong

+0

좋은 소식! Windows 이벤트 로그에 버블 링되는 이벤트는 Store 크래시 덤프에서 얻을 수있는 것과 거의 같습니다. 따라서 WinJS.Application.onerror에 거품이 생기지 않는 한 '설명 할 수없는 충돌'이 생산 과정에서 눈에 띄지 않을 것이라고 확신 할 수 있습니다. – deepelement

4

제이슨은이 문제에 대한 좋은 해결책을 제시합니다 in this video (14:48부터 시작). 그의 예에서 콜백이 있었고 콜백이 완료되기 전에 다른 페이지로 이동 한 경우 응용 프로그램이 충돌했습니다. 이 경우 앱에 해당 할 수 있습니까? 탐색 할 때 진행되는 작업에 대한 자세한 내용은 무엇입니까? 다른 사람을 위해

(이 보이기 때문에 당신은 이미 이것에 대해 알고있다!) :

WinJS.Application.OnError event을 사용, 쉽게 디버깅 할 수 있으려면. 앱이 충돌하기 전에 문제에 대한 정보를 덤프하는 이벤트 핸들러를 연결합니다.

WinJS.Application.onerror = function (info) { 
    var err = { 
    errorMessage: info.detail.errorMessage, 
    errorUrl: info.detail.errorUrl, 
    errorLine: info.detail.errorLine, 
    errorCharacter: info.detail.errorCharacter, 
    }; 

    Windows.Storage.ApplicationData.current.localFolder 
     .createFileAsync("crash.txt", Windows.Storage.CreationCollisionOption.openIfExists) 
     .then(function (file) { 
     Windows.Storage.FileIO.appendLinesAsync(file, [JSON.stringify(err)]); 
     }); 
}; 
+0

, 나는보다 더 아무것도하지 다시 네비게이션; 그래서 콜백 문제라고 생각합니다. 그러나 나는 그것이 어디에서 왔는지를 발견하지 못하고, 아직 아무 것도 기록하지 못했습니다. onerror 이벤트가 발생하지 않고 응용 프로그램이 중단 될 수있는 방법이 있습니까? – glacasa

+0

좋아, app.onerror를 호출하지 않고 앱이 어떻게 중단 될 수 있는지 발견했습니다. http://www.davepaquette.com/archive/2012/09/15/windows-8-store-app-crash-logs.aspx 세부 정보는 이벤트 로그에 있으며 예외의 출처 (외부 페이지 – glacasa

0

JavaScript의 마지막 중지 점은 실제로 window.onerror입니다. 모든 예외가 WinJS.Application.onerror를 통해 throw되지는 않습니다. 직접 window.onerror에 연결해보십시오.

+1

방금 ​​window.onerror로 시도했지만 예외가 발생하지 않았습니다. – glacasa

관련 문제