delphi经典编程入门(12)

delphi经典编程入门(12)

ID:33928849

大小:172.06 KB

页数:28页

时间:2019-02-28

delphi经典编程入门(12)_第1页
delphi经典编程入门(12)_第2页
delphi经典编程入门(12)_第3页
delphi经典编程入门(12)_第4页
delphi经典编程入门(12)_第5页
资源描述:

《delphi经典编程入门(12)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十二章异常处理与程序调试(一)页码,1/28[Delphi园地http://www.delphifans.com]第十二章异常处理与程序调试(一)在应用程序开发中如何检测、处理程序的运行错误是一个很重要的问题。在Delphi的集成开发环境(IDE)中提供了一个完善的内置调试器,可以帮助你发现大部分程序错误。但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符、磁盘不能读写等。这些情况不仅会导致应用程序异常中止而且可能引起系统

2、的崩溃。针对这些问题,Delphi同时提供了一套强大的异常处理机制。巧妙地利用它,可以使你的程序更为强健,使用更为友好。虽然Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。但当应用程序执行的过程性很强时,仅仅利用这种方法是不够的,而且很容易导致程序执行的不可预测性。12.1Delphi异常处理机制与异常类Delphi异常处理机制建立在保护块(ProtectedBlocks)的概念上。所谓保护块是用保留字try和end封装的一段代码。保护

3、块的作用是当应用程序发生错误时自动创建一个相应的异常类(Exception)。程序可以捕获并处理这个异常类,以确保程序的正常结束以及资源的释放和数据不受破坏。如果程序不进行处理,则系统会自动提供一个消息框。异常类是Delphi异常处理机制的核心,也是Delphi异常处理的主要特色。下面我们对异常类的概念和体系进行详细的介绍。Delphi提供的所有异常类都是类Exception的子类。用户也可以从Exception派生一个自定义的异常类。Exception类的定义如下,对于不常用的成员没有列出。{SysUtils单元中}E

4、xception=class(TObject)privateFMessage:PString;FHelpContext:Longint;functionGetMessage:String;procedureSetMessage(constValue:String);publicconstructorCreate(constMsg:String);constructorCreateFmt(constMsg:String;constArgs:arrayofconst);...destructorDestroy;overrid

5、e;propertyHelpContext:LongintpropertyMessage:String;propertyMessagePtr:PString;end;Exception的一系列构造函数中最重要的参数是显示的错误信息。而数据成员中最重要的也是可被引用的消息字符串(message,messagePtr)。这些信息分别对自定义一个异常类和处理一个异常类有重要作用。第十二章异常处理与程序调试(一)页码,2/28Delphi提供了一个很庞大的异常类体系,这些异常类几乎涉及到编程的各个方面。从大的方面我们可以把异常类

6、分为运行时间库异常、对象异常、部件异常三类。下面我们分别进行介绍。12.1.1运行时间库异常类(RTLException)运行时间库异常可以分为七类,它们都定义在SysUtils库单元中。12.1.1.1I/O异常I/O异常类EInOutError是在程序运行中试图对文件或外设进行操作失败后产生的,它从Exception派生后增加了一个公有数据成员ErrorCode,用于保存所发生错误的代码。这一成员可用于在发生I/O异常后针对不同情况采取不同的对策。当设置编译指示{$I-}时,不产生I/O异常类而是把错误代码返回到预定

7、义变量IOResult中。12.1.1.2堆异常堆异常是在动态内存分配中产生的,包括两个类EOutOfMemory和EInvalidPointer。表12.1堆异常类及其产生原因━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━异常类引发原因─────────────────────────────────EOutOfMemory没有足够的空间用于满足所要求的内存分配EInvalidPointer非法指针。一般是由于程序试图去释放一个业已释放的指针而引起的━━━━━━━━━━━━━━━━━━━━━━━━━

8、━━━━━━━━12.1.1.3整数异常整数异常都是从一个EIntError类派生的,但程序运行中引发的总是它的子类:EDivByZero,ERangeError,EIntOverFlow。表12.2整数异常及其产生原因━━━━━━━━━━━━━━━━━━━━━异常类引发原因─────────────────────

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。