Delphi异常处理与程序调试
如何检测和处理应用程序开发中的运行错误是一个非常重要的问题。Delphi的集成开发环境(IDE)中提供了完善的内置调试器,可以帮助你找到大部分的程序错误。但并不是所有的错误都能被发现,而且当程序涉及到与外设进行数据交换或者操作外设时,比如要求用户输入、读写磁盘等。错误的发生是程序无法控制的,如输入非法字符,磁盘无法读写等。这些情况不仅会导致应用程序异常中止,还会导致系统崩溃。为了解决这些问题,Delphi还提供了强大的异常处理机制。巧妙的使用它可以使你的程序更加健壮和友好。
虽然Delphi为应用程序提供了一套默认的自动异常处理机制,即出现错误后,当前模块退出当前模块并给出错误信息,并不会立即导致应用程序停止。但是当应用执行的过程性很强时,仅仅使用这种方法是不够的,而且会容易导致程序执行的不可预测性。
12.1 Delphi的异常处理机制和异常类
Delphi的异常处理机制是基于保护块的概念。所谓保护块,就是用保留字try和end封装的一段代码。保护块的功能是在应用程序出错时自动创建相应的异常类。程序可以捕捉并处理这个异常类,以确保程序的正常结束、资源的释放和数据的不被破坏。如果程序不加工,系统会自动提供一个消息框。
类是Delphi异常处理机制的核心,也是Delphi异常处理的主要特征。下面详细介绍一下异常类的概念和体系。
Delphi提供的所有异常类都是Exception类的子类。用户还可以从Exception派生一个自定义的异常类。
异常类的定义如下,不常用的成员不列出。
{在{系统工具单位}中
异常=类(对象)
私人的
f message:p string;
FHelpContext:Longint;
函数GetMessage:String;
过程SetMessage(常数值:字符串);
公众的
构造函数Create(const Msg:String);
构造函数create fmt(const Msg:String;const Args:const的数组);。。。
析构函数Destroy覆盖;
属性HelpContext: Longint
属性消息:字符串;
属性message ptr:p string;
结束;
异常的一系列构造函数中最重要的参数是显示的错误信息。最重要的数据成员是可以引用的消息字符串(message,messagePtr)。这些信息分别在定制异常类和处理异常类中起着重要的作用。
Delphi提供了一个庞大的异常类系统,它几乎涉及编程的所有方面。从大的方面来说,我们可以把异常类分为三类:运行时异常、对象异常和组件异常。下面分别介绍一下。
12.1.1运行时库异常类(RTL异常)
运行时库异常可以分为七类,它们都是在SysUtils库单元中定义的。
12.1.1.1的I/o不正常。
I/O异常类EInOutError是在程序运行中试图对文件或外设进行操作失败后产生的。它从exception派生并添加一个公共数据成员ErrorCode来存储错误代码。该成员可用于在I/O异常发生后,针对不同的情况采取不同的对策。
设置编译指令{$I-}时,不会生成I/O异常类,但会将错误代码返回给预定义的变量IOResult。
0条评论