在應用程序開發中如何檢測
雖然Delphi為應用程序提供了一套缺省的自動異常處理機制
Delphi異常處理機制建立在保護塊(Protected Blocks)的概念上
異常類是Delphi異常處理機制的核心
Delphi提供的所有異常類都是類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;
Exception的一系列構造函數中最重要的參數是顯示的錯誤信息
Delphi提供了一個很龐大的異常類體系
運行時間庫異常可以分為七類
I/O異常類EInOutError是在程序運行中試圖對文件或外設進行操作失敗後產生的
當設置編譯指示{$I
堆異常是在動態內存分配中產生的
表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發原因
─────────────────────────────────
EOutOfMemory 沒有足夠的空間用於滿足所要求的內存分配
EInvalidPointer 非法指針
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
整數異常都是從一個EIntError類派生的
表
━━━━━━━━━━━━━━━━━━━━━
異常類 引發原因
─────────────────────
EDivByZero 試圖被零除
ERangeError 整數表達式越界
EIntOverFlow 整數操作溢出
━━━━━━━━━━━━━━━━━━━━━━
ERangeError當一個整數表達式的值超過為一個特定整數類型分配的范圍時引發
var
SmallNumber: ShortInt;
X
begin
X :=
Y :=
SmallNumber := X * Y;
end;
特定整數類型包括ShortInt
type
THazard = ( Safety
var
Haz: THazard;
Item: Integer;
begin
Item:=
Haz:= THazard ( Item )
end;
由於枚舉數越界而引發一個ERangeError異常
數組元素越界也會引發一個ERangeError異常
var
Values: array[
i: Integer;
begin
for i :=
Values[i] := i;
end;
ERangeError異常只有當類型檢查打開時才會引發
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25191.html