2013-04-09 49 views
1

我正在嘗試爲我的應用程序創建崩潰報告。使用調試運行遊戲時,獲取堆棧跟蹤很容易:它包含在崩潰中創建的Error對象中。但是在沒有調試的情況下運行時,缺少這些信息。在沒有調試器的情況下運行時獲取閃存應用程序的堆棧跟蹤

有什麼方法可以獲取這些信息嗎?

+1

文檔說:「對於Flash Player 11.4和早期版本和AIR 3.4及更早版本,堆棧跟蹤是** **僅時可用代碼在運行調試器版本的Flash Player或AIR Debug Launcher(ADL)。在這些運行時的非調試版本中,調用此方法將返回null。「也許嘗試定位更新版本的Flash Player或AIR,看看是否有效? – puggsoy 2013-04-09 18:22:21

+0

請參閱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

+0

簡短的回答:沒有工作。我一直在嘗試這一段時間,只能在調試模式下工作。你也可以手動指定發生這種情況的類/行,但這很醜陋和不專業(任何代碼更改都需要更新),所以我不推薦它。 – 2013-04-10 06:07:18

回答

0

您可以在應用程序的可疑位置使用try-catch塊。

try { 
    ExternalInterface.call('conf', 4); 
    ExternalInterface.addCallback('transcodeReqAnswer', analyseTranscodeAnswer); 
} catch(er:Error) { 
    debugTextField.text = er.getStackTrace(); 
} 
+1

這將只在調試模式下正常工作,在發佈版本中你只會得到錯誤名稱 – 2013-04-10 06:08:58

+0

對不起,不知道這個。 – JustLogin 2013-04-10 06:11:34

+0

try ... catch在處理器上也很重。您應該避免在發行版中使用它。 – 2013-04-10 16:18:22

0

如果您在調試模式下編譯,您必須通過ExternalInterface將參數傳遞給javascript。然後,您應該能夠從瀏覽器的控制檯輸出中看到堆棧跟蹤。

實施例:

flash.system.Security.allowDomain(sourceDomain) 
ExternalInterface.call("print", error.getStackTrace()); 

和在JavaScript中應該有一個功能

function takeLog(string) { 
    console.log("stacktrace: " + string); 
} 

在非調試方式的getStackTrace()函數返回空值。官方文檔中

更多信息, ExternalInterface.call()getStackTrace()

相關問題