錯誤處理的基本概念

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

執行階段錯誤指的是讓 ActionScript 內容無法繼續預期執行的 ActionScript 程式碼錯誤。為了確保您的 ActionScript 程式碼能夠讓使用者順利執行,請在應用程式中撰寫能夠處理錯誤的程式碼,也就是必須能夠修正錯誤、提出替代方案,或是至少讓使用者知道已經發生錯誤。這項程序我們稱為「錯誤處理」。

「錯誤處理」這個類別極為廣泛,包含對各種錯誤的回應,而這些錯誤都是在編譯或應用程式執行過程所擲回。發生在編譯階段的錯誤通常比較容易分辨出來,請加以修正,才能完成 SWF 檔的建立程序。

執行階段錯誤比較不容易偵測,因為往往需要實際執行錯誤的程式碼才會出現此類錯誤。如果程式某個區段包含數個程式碼分支,像是 if..then..else 陳述式,請代入實際應用中使用者可能會使用的所有可能輸入值來測試每個可能的情況,以便確定程式碼完全沒有錯誤。

執行階段錯誤可分為兩個類別:「程式錯誤」指的是 ActionScript 程式碼中的錯誤,例如在方法參數中指定了錯誤的資料類型;「邏輯錯誤」則是程式中的邏輯錯誤 (資料檢查與數值操作),例如在計算銀行應用程式中的利率時,使用了錯誤的公式。同樣地,通常您只需小心測試應用程式,就能夠事先偵測並修正這兩種類型的錯誤。

最理想的情況,就是在您將應用程式發佈給一般使用者之前,先從應用程式中找出並移除所有的錯誤。然而,並非所有的錯誤都可以事先察覺或是加以預防。例如,假設您的 ActionScript 應用程式從您掌控範圍外的特定網站載入一些資訊。如果在載入過程中網站無法使用,則仰賴該外部資料的部分應用程式也會跟著出現異常行為。錯誤處理最重要的層面涉及這些不明的狀況以及順利地予以處理。使用者需要繼續使用您的應用程式,或者至少得到一則友善的錯誤訊息,告知為何無效。

ActionScript 以下列兩種方式來表示執行階段錯誤:

  • 錯誤類別:許多錯誤都有相關的錯誤類別。一旦發生某種錯誤,Flash 執行階段 (如 Flash Player 或 Adobe AIR) 就會建立與該特定錯誤相關聯的特定錯誤類別實體。您的程式碼可以運用包含在該錯誤物件中的資訊,以便針對錯誤做出適當的回應。

  • 錯誤事件:有時當 Flash 執行階段要按照正常程序觸發事件時,就會出現錯誤。在這些情況下,會改為觸發錯誤事件。每個錯誤事件都有相關聯的類別,而 Flash 執行階段會將該類別的實體傳遞至已訂閱錯誤事件的方法中。

若要判斷特定方法是否會觸發錯誤或錯誤事件,請參閱 適用於 Adobe Flash Platform 的 ActionScript 3.0 參考 中的方法項目。

重要概念與術語

以下參考清單包含程式設計錯誤處理途徑的重要術語:

非同步
一種程式命令,例如不會立即提供結果的方法呼叫;它將以事件形式提供結果 (或錯誤)。

捕捉
一旦發生例外 (執行階段錯誤) 而您的程式碼察覺例外情況時,就可以說該程式碼「捕捉」到例外。一旦捕捉到例外,Flash 執行階段就會停止通知其它 ActionScript 程式碼有關此例外情況。

除錯程式版本
包含用來通知使用者執行階段錯誤之程式碼的 Flash 執行階段特殊版本,例如 Flash Player 除錯程式版本或 AIR Debug Launcher (ADL)。在 Flash Player 或 Adobe AIR 標準版中 (就是大多數使用者所使用的版本),如果錯誤未經過您的 ActionScript 程式碼處理,就會被 Flash Player 忽略。在除錯程式版本中 (隨附於 Adobe Flash CS4 Professional 和 Adobe Flash Builder),一旦出現未處理的錯誤,就會出現警告訊息。

例外
程式執行時所出現的錯誤,且 Flash 執行階段無法自行解決這個錯誤。

重新擲回
一旦您的程式碼捕捉到例外,Flash 執行階段就不會再通知其它物件有關此例外情況。如果其它物件必須得收到此例外情況,則您的程式碼必須「重新擲回」例外,以便再次啟動通知程序。

同步
一種程式命令,例如方法呼叫,用來提供立即的結果 (或立即擲回錯誤),意思就是可以在相同的程式碼區塊中使用該回應。

擲回
通知 Flash 執行階段 (並緊接著通知其它物件與 ActionScript 程式碼) 已經發生錯誤的行為,亦稱為「擲回」錯誤。