我正在嘗試爲我的應用程序創建崩潰報告。使用調試運行遊戲時,獲取堆棧跟蹤很容易:它包含在崩潰中創建的Error對象中。但是在沒有調試的情況下運行時,缺少這些信息。在沒有調試器的情況下運行時獲取閃存應用程序的堆棧跟蹤
有什麼方法可以獲取這些信息嗎?
我正在嘗試爲我的應用程序創建崩潰報告。使用調試運行遊戲時,獲取堆棧跟蹤很容易:它包含在崩潰中創建的Error對象中。但是在沒有調試的情況下運行時,缺少這些信息。在沒有調試器的情況下運行時獲取閃存應用程序的堆棧跟蹤
有什麼方法可以獲取這些信息嗎?
您可以在應用程序的可疑位置使用try-catch塊。
try {
ExternalInterface.call('conf', 4);
ExternalInterface.addCallback('transcodeReqAnswer', analyseTranscodeAnswer);
} catch(er:Error) {
debugTextField.text = er.getStackTrace();
}
這將只在調試模式下正常工作,在發佈版本中你只會得到錯誤名稱 – 2013-04-10 06:08:58
對不起,不知道這個。 – JustLogin 2013-04-10 06:11:34
try ... catch在處理器上也很重。您應該避免在發行版中使用它。 – 2013-04-10 16:18:22
如果您在調試模式下編譯,您必須通過ExternalInterface將參數傳遞給javascript。然後,您應該能夠從瀏覽器的控制檯輸出中看到堆棧跟蹤。
實施例:
flash.system.Security.allowDomain(sourceDomain)
ExternalInterface.call("print", error.getStackTrace());
和在JavaScript中應該有一個功能
function takeLog(string) {
console.log("stacktrace: " + string);
}
在非調試方式的getStackTrace()函數返回空值。官方文檔中
文檔說:「對於Flash Player 11.4和早期版本和AIR 3.4及更早版本,堆棧跟蹤是** **僅時可用代碼在運行調試器版本的Flash Player或AIR Debug Launcher(ADL)。在這些運行時的非調試版本中,調用此方法將返回null。「也許嘗試定位更新版本的Flash Player或AIR,看看是否有效? – puggsoy 2013-04-09 18:22:21
請參閱http://stackoverflow.com/questions/13999626/can-i-build-a-debug-version-of-an-adobe-air-application/14000013#14000013 - 有關AIR的問題,但也適用於FlashPlayer – 2013-04-09 19:47:21
簡短的回答:沒有工作。我一直在嘗試這一段時間,只能在調試模式下工作。你也可以手動指定發生這種情況的類/行,但這很醜陋和不專業(任何代碼更改都需要更新),所以我不推薦它。 – 2013-04-10 06:07:18