文档详情

第章 Delphi异常处理与调试.ppt

发布:2017-06-15约2.84万字共110页下载文档
文本预览下载声明
第7章 Delphi异常处理与调试 7.1 Delphi异常处理 7.2 Delphi异常类 7.3 Delphi异常处理机制 7.4 Delphi调试器 7.5 控制程序的运行 7.6 断点 7.7 监视表达式的值 7.8 实验 7.1 Delphi异常处理 7.1.1 异常处理的意义 异常可以理解为一种特殊的事件。当这种特殊的事件发生时,程序正常的执行流程将被打断。异常处理机制能够确保在发生异常的情况下应用程序不会中止运行,也不会丢失数据或资源。 没有人能保证程序代码绝对不出错。有时候,即使程序本身没有错,但与程序打交道的软、硬件设备出错,也会使程序出现异常。引起异常的设备称为“异常源”,包括操作系统、设备驱动程序、数据库驱动程序(诸如BDE、SQL Links、ODBC、ADO)、动态链接库、常驻内存的防病毒软件、Delphi自身的组件库和运行期库等。 异常几乎是不可避免的。过去,在没有异常处理机制的情况下,程序员不得不小心翼翼地检查每一次函数调用的返回值,或者通过额外的代码捕获可能的错误。 关键是,通过检查函数的返回值或设置错误陷阱只能捕获可预见的错误。如果发生没有预见到的错误,或者函数调用本身就已失败,则程序正常的流程将被打乱。 还有一个问题就是,程序中过多的错误检查代码也破坏了程序的可读性。事实上,这些代码大都是闲置的,因为程序中到处发生异常的可能性毕竟不是很大。 使用Object Pascal语言的异常处理机制,就能解决上述弊端。它既能使程序的安全性得到保证,又不至于使程序代码过分琐碎。下面先看一段没有采用异常处理机制的代码: var AChar,AString:ShortString; begin AString:=Welcome to Delphi; AChar:=Copy(AString,20,1); if AChar#0 then // #0是空字符,不是空格 begin if AChar! then Insert(AChar,AString,20); Exit; end; end; 在上述代码中,虽然检查了Copy()的返回值,但如果Copy()本身调用失败,则程序就执行不到Exit语句。下面改用异常处理机制来编写这段代码。 var AChar,Astring:ShortString; begin try AString:=Welcome to Delphi; AChar:=Copy(Astring,20,1); if AChar! then Insert(AChar,AString,20); except Exit; end; End; 采用了异常处理机制后,可以先假设程序不可能出错,按正常的顺序编写代码。当代码在运行过程中出现异常时,将跳转到except部分,执行Exit语句。 异常处理机制有两种结构:一种是try…except结构,另一种是try…finally结构,这两种结构在用法上有很大的区别。 7.1.2 错误类型 一般来说,无论在编程的时候如何仔细,程序总会有错误。错误分为4种类型:设计期错误、编译期错误、运行期错误、逻辑错误。 1. 设计期错误 这种错误类型发生在设计期,通常是因为给组件的某个属性输入了非法的值。例如,在设计数据库应用程序时指定了一个没有定义的数据库别名。 这种类型的错误比较容易被发现和纠正,因为Delphi能够对属性的值进行合法性检查。一旦发现这种错误,Delphi将弹出一个警告窗口,提示用户纠正错误。 2. 编译期错误 编译期错误也叫语法错误,当程序代码违反了Object Pascal的语法规则时将发生这种错误。 如果程序代码中有语法错误,编译就不能通过,代码编辑器的状态栏将给出错误信息提示,并在代码编辑器中突出显示有语法错误的行。 比较常见的语法错误是数据类型不匹配,特别是调用RTL、VCL或Windows的API时容易发生参数不匹配的错误。为了避免这类错误,建议使用Delphi的在线帮助,找到RTL、VCL或API的声明,仔细对照它们的参数。不小心输错变量名或命令语句拼写错误也是经常造成编译期错误的原因。 编译器检查语法错误的功能是可以自定义的。可以使用【Project】菜单中的【Options】命令打开【Project Options】对话框,然后设置编译器的语法检查选项。 3. 运行期错误 程序虽然通过了编译,但在运行时失败了,这种错误称为运行期错误。例如,程序试图打开一个不存在的文件,或者在运算时出现了被零除。 运
显示全部
相似文档