Delphi 異常處理建立在保護區塊概念上:try 與 end 封裝程式碼區塊。錯誤發生時自動建立對應異常類別,程式可捕獲處理以確保正常結束、資源釋放與資料完整。未處理時系統自動顯示訊息框。
所有異常類別繼承自 Exception,使用者可自行衍生。Exception 定義(SysUtils 單元):
Exception = class(TObject)
private
FMessage: PString;
FHelpContext: Longint;
function GetMessage: String;
procedure SetMessage(const Value: String);
public
constructor Create(const Msg: String);
constructor CreateFmt(const Msg: String; const Args: array of const); ...
destructor Destroy; override;
property HelpContext: Longint;
property Message: String;
property MessagePtr: PString;
end;
建構函數最重要參數為顯示錯誤訊息,資料成員最重要為可被引用的 Message/MessagePtr,對自訂異常與處理異常均關鍵。
Delphi 提供龐大異常體系,涵蓋程式設計各面向。大分類:執行階段庫異常、物件異常、元件異常。
定義於 SysUtils,分七類:
檔案/周邊操作失敗產生。繼承 Exception 並增加公開資料成員 ErrorCode 保存錯誤代碼,可針對不同錯誤採取不同對策。設定 {$I-} 時不產生異常,改將錯誤代碼回傳至預定義變數 IOResult。
動態記憶體配置產生,含兩類:
| 異常類別 | 觸發原因 |
|---|---|
| EOutOfMemory | 記憶體空間不足,無法滿足配置需求 |
| EInvalidPointer | 非法指標,通常因嘗試釋放已釋放指標引起 |
Delphi 提供預設自動異常處理:錯誤發生後退出當前模組並給出訊息,不立即終止應用程式。但程式執行過程性強時僅靠此法不足,易導致執行不可預測性,需開發者主動運用異常處理機制強化程式健全度。