第十二章 非常处理与程序调试(一)[Delphi编程]
本文“第十二章 非常处理与程序调试(一)[Delphi编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在利用程序开辟中若何检测、处理程序的运行错误是一个很重要的问题.在 Delphi 的集成开辟环境( IDE )中供应了一个完善的内置调试器,可以帮忙你发现大部份程序错误.但并非全部的错误都可以被发现,并且当程序触及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法掌握的,如输入不法字符、磁盘不能读写等.这些情形不但会招致利用程序非常中止并且大概惹起系统的崩溃.针对这些问题,Delphi同时供应了一套强盛的非常处理机制.巧妙地操纵它,可以使你的程序更为健旺,利用更为友好.
固然Delphi为利用程序供应了一套缺省的自动非常处理机制,即当前模块发生错误撤退出当前模块并给出错误信息,而并不当即惹起利用程序的中止.但当利用程序履行的历程性很强时,仅仅操纵这种办法是不够的,并且很简单招致程序履行的不可猜测性.
12.1 Delphi非常处理机制与非常类
Delphi非常处理机制成立在保护块(Protected Blocks)的概念上.所谓保护块是用保存字try和end封装的一段代码.保护块的作用是当利用程序发生错误时自动成立一个呼应的非常类(Exception).程序可以捕捉并处理这个非常类,以确保程序的正常完毕以及资源的释放和数据不受破坏.假如程序不举行处理,则系统会自动供应一个消息框.
非常类是Delphi非常处理机制的核心,也是Delphi非常处理的主要特点.下面我们对非常类的概念和体系举行具体的介绍.
Delphi供应的全部非常类都是类Exception的子类.用户也可以从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的一系列构造函数中最重要的参数是显示的错误信息.而数据成员中最重要的也是可被引用的消息字符串(message,messagePtr). 这些信息辨别对自定义一个非常类和处理一个非常类有重要作用.
Delphi供应了一个很宏大的非常类体系,这些非常类几近触及到编程的各个方面.从大的方面我们可以把非常类分为运行时间库非常、对象非常、部件非常三类.下面我们辨别举行介绍.
12.1.1 运行时间库非常类(RTL Exception)
运行时间库非常可以分为七类,它们都定义在
SysUtils库单元中.12.1.1.1 I/O非常
I/O非常类EInOutError是在程序运行中试图对文件或外设举行操作失利后产生的,它从Exception派生后增添了一个公有数据成员ErrorCode,用于保存所发生错误的代码.这一成员可用于在发生I/O非常后针对差别情形采纳差别的对策.
当设置编译指导{$I- } 时,不产生I/O非常类而是把错误代码返回到预定义变量IOResult中.
12.1.1.2 堆非常
堆非常是在动态内存分配中产生的,包含两个类EOutOfMemory和EInvalidPointer.
表
12.1 堆非常类及其产生缘由━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
非常类 引发缘由
─────────────────────────────────
EOutOfMemory 没有充足的空间用于满意所要求的内存分配
EInvalidPointer 不法指针.普通是由于程序试图去释放一个业已释放的指针而惹起的
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以上是“第十二章 非常处理与程序调试(一)[Delphi编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |