不幸的是,在這一點上你可以做很多事情。顯而易見的地方當然是試圖讓用戶在Flash Player的調試版上運行程序。但是,如果你不能,你需要找到一種方式,一個「包羅萬象」的一種方式運行時錯誤檢測到「在建」,只有兩個直接的補救措施,我能想到的:
在應用程序中的關鍵點插入默認日誌消息。這應該處於更高的抽象層次,可能在創建或刪除模塊時,或者開始和完成複雜任務時。理想情況下,日誌記錄也應該是可配置的,以便您可以在需要時打開或關閉詳細輸出,例如通過更改配置文件或在編譯過程中設置環境變量 - 調試代碼可能會使您的應用程序變慢一點,並且您不希望每次出現錯誤時都必須添加和刪除單個跟蹤語句。如果您是一位高級ActionScript開發人員,您甚至可能希望找到一種通過元數據和/或自定義名稱空間實現日誌記錄的方法 - 這是一種更簡潔的方法。
將catch-all approach應用於您的整個應用程序,並追蹤堆棧中的每個錯誤。也許這並不比你已經有的更明確,但至少你可以乾淨地關閉程序(例如,向用戶顯示一條消息),而不是讓它崩潰。
很不幸,你已經創建你的程序有一個「不要告訴我測試之前,我釋放」的態度 - 有隻是沒有很多事情可以「回想」這樣做,除了火調試器,並加入一些額外的時間。事實上,你應該測試每一行代碼,然後你甚至會寫出它 ......但我不會去 - TDD通常是需要更多解釋而不是單個答案的東西。
下面是一些簡單的事情可以做,以使你的生活在未來更容易:
的最大的錯誤,人們普遍提出的,是不要讓錯誤發生在首位:如果,例如,您有許多null
-checks在應用程序代碼:
if (myVar != null) doMyStuff(); // or
if (myVar == null) return;
這通常用於防止可怕的#1009錯誤的顯示出來,這是比較有效的,乍一看它比使用try...catch
塊更快。但它也將掩蓋問題的根源,或者甚至讓它不被注意:您的錯誤可能會在稍後出現,其他地方應該已經在doMyStuff()
中初始化,或者可能有些地方您只是忘記了檢查。
成爲無差錯的最佳策略是:
不返回,或者分配非法值(例如,不要讓你的函數返回null
,分配初始值的所有變量等)
執行try...catch
在應用程序中的關鍵點(無論什麼時候出現問題,本質上)。然後,這些會在發現錯誤時發送詳細的日誌消息,因此您無需訴諸冗長的調試會話就可以輕鬆發現原因。
創建自我驗證對象。我喜歡有一個verify()
方法,該方法在對象初始化或添加到舞臺之前調用,檢查所有必需的依賴項 - 如果缺少任何內容或具有錯誤的值,則會拋出InstantiationException
。
謝謝 - 這些都是好想法。 – 2012-02-11 18:11:52