手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi 异常处理与程序调试(一)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
EDiVByZeroERangeErrorEIntOverFlow。 

   表12.2  整数异常及其产生原因

━━━━━━━━━━━━━━━━━━━━━

异常类 引发原因

─────────────────────

EDivByZero 试图被零除

ERangeError 整数表达式越界

EIntOverFlow 整数操作溢出

━━━━━━━━━━━━━━━━━━━━━━ 

  ERangeError当一个整数表达式的值超过为一个特定整数类型分配的范围时引发。比如下面一段代码将引发一个ERangeError异常。 

var

SmallNumber: ShortInt;

X , Y: Integer;

begin

X := 100;

Y := 75;

SmallNumber := X * Y;

end;

  特定整数类型包括ShortIntByte以及与整数兼容的枚举类型、布尔类型等。例如:  

type

THazard = ( Safety , Marginal , Critical , Catastrophic );

var

Haz: THazard;

Item: Integer;

begin

Item:= 4;

Haz:= THazard ( Item );

end; 

由于枚举数越界而引发一个ERangeError异常。

  数组元素越界也会引发一个ERangeError异常,如: 

var

Values: array[1..10] of Integer;

i: Integer;

begin

for i := 1 to 11 do

Values[i] := i;

end;

ERangeError异常只有当类型检查打开时才会引发。这可以在代码中包含{$R } 编译指示或设置IDE Option|ProjectRange_Checking Option选择框。

  EIntOverFlow异常类在IntegerWordLongint三种整数类型越界时引发。如:

var

I : Integer;

a,b,c : Word;

begin

a := 10;

b := 20;

c := 1;

for I := 0 to 100 do

begin

c := a*b*c;

end;

end;

引发一个EIntOverFlow异常。

EIntOverFlow异常类只有在编译选择框Option|Project|Over_Flow_Check Option选中时才产生。当关闭溢出检查,则溢出后变量保留该类整数的最大范围值。

整数类型的范围如下表。 

   表12.3 整数类型的范围

━━━━━━━━━━━━━━━━━━━━━━━━━━━

类型 范围 格式

  ───────────────────────────

Shortint -128 .. 127 有符号8

Integer -32768 .. 32767 有符号16

Longint -2147483648 .. 2147483647 有符号32

Byte 0 .. 255 无符号8

Word 0 .. 65535 无符号16

━━━━━━━━━━━━━━━━━━━━━━━━━━━  

12.1.1.4 浮点异常 

  浮点异常是在进行实数操作时产生的,它们都从一个EMathError类派生,但与整数异常相同,程序运行中引发的总是它的子类EInvalidOpEZeroDivideEOverFlowEUnderFlow。 

   表12.4 浮点异常类及其引发原因

━━━━━━━━━━━━━━━━━━━━━━━━

异常类 引发原因

────────────────────────

EInvalidOp 处理器碰到一个未定义的指令

EZeroDivide 试图被零除

EOverFlow 浮点上溢

EUnderFlow 浮点下溢

━━━━━━━━━━━━━━━━━━━━━━━━ 

  EInvalidOp最常见的引发原因是没有协处理器的机器遇到一个协处理器指令。由于在缺省情况下Delphi总是把浮点运算编译为协处理器指令,因而在386以下微机上常常会碰到这个错误。此时只需要在单元的接口部分设置全局编译指示{

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!