2013-10-17 30 views
0

我正在處理一些Flash應用程序。現在,爲了測試它的客戶端,我可以使用Flash Player調試器版本來保存日誌並顯示錯誤消息。當它在客戶端部署時 - 它們將具有常規的Flash Player版本,這意味着如果發生錯誤,我將無法訪問錯誤消息。所以我想用它來配備一些工具,以捕獲代碼和錯誤文本中的所有跟蹤消息。至於追蹤相當簡單的消息,我只是在我的代碼中覆蓋函數,因此它會向跟蹤記錄服務器發送帶有跟蹤消息的POST請求,但是如何獲取錯誤消息?有沒有一種已知的方法或某些人可以建議的技巧?AS3,Flash:訪問代碼中的錯誤消息文本

回答

1

我發現StackOverflow上這個帖子: How to catch all exceptions in Flex?

它回答我的問題,奇怪的是,雖然我之前問谷歌搜索我沒有跑進去。

+0

Oooo,閃亮!我將不得不自己嘗試一下。很好的發現。 :) – Atriace

+0

是的,這對我的Flash Player項目非常有用,但是我對AIR有問題。我僅限於使用AIR 3.1名稱空間的Flex SDK 4.6。因此,我可以用14來編譯AIR的最高swf版本,但是我需要18才能讓getStackTrace()不顯示爲空。因此,雖然我的應用程序在AIR 3.9運行時運行,但它仍然返回null :(有沒有一種方法可以定位比我的SDK更高的版本? – pokrishka

+0

JEEZ,現在這簡直荒謬! http://www.alivelearn.net/ ?p = 623 原來,即使在沒有調試啓動器和其他所有東西的情況下,我也可以在調試模式下輕鬆地運行AIR應用程序,只需將名爲'debug'的空文件放入ApplicationDirectory/META-INF/AIR即可所有我需要的魔法。廢話,爲什麼沒有記錄/彈出每個「空調」谷歌搜索?可以節省我一大筆時間!如果您正在使用AIR應用程序,Atriace,這可能對您也有幫助,請檢查一下:) – pokrishka

1

您可以安裝Flash作爲瀏覽器的默認的調試版本(在Chrome中,您必須禁用內置的播放器),所以如果你想測試的用戶體驗調試,這將是理想的解決方案。

但是,要回答你的問題:沒有辦法普遍捕獲所有錯誤,並重定向它們(我知道的)。您必須提前將問題代碼封裝爲try...catch陳述,並將該財產寄回catch。例如:

try { 
    this["foo"](); 
} catch (e:Error) { 
    trace(e); 
} 

在調試版本,跟蹤的價值將是TypeError: Error #1006: value is not a function.雖然標準版將只輸出TypeError: Error #1006,(一個特別少描述性錯誤),就是我們缺少的是在任何參考發生了錯誤。爲了得到這個,我們需要使用Error.getStackTrace()來查看調用堆棧和發生錯誤的行。在調試,這個輸出以下:

TypeError: Error #1006: value is not a function. 
    at Shell_fla::MainTimeline/init()[C:\Projects\shell.as:91 

在標準的客戶端,我們得到了一個dissapointing null。總之,您無法從客戶端版本獲得任何有價值的信息。

我可以給的最好的建議是用你自己的自定義錯誤報告寫下你的問題代碼。例如,捕獲IO錯誤並跟蹤其加載失敗的文件,或者如果您期待object.foo,請首先嚐試if (object.hasOwnProperty("foo")) { // do something } else { trace("foo not found in " + object.name) }。代碼防守。

乾杯,

+0

謝謝您的全面解釋,Atriace!我會等待其他人是否有任何補充,並在稍後將答覆標記爲答案。 – pokrishka

+0

我檢查了getStackTrace()上的鏈接 - 看起來它應該在非調試環境中啓動Flash Player 11.4/AIR 3.4。得試試。 – pokrishka