第十二章异常处理与程序调试一内容摘要:

型的浮点数 (Real、 Single、 Double、 Extended)越界引起同样的溢出异常。 这同整数异常类是不同的。 类型匹配异常 类型匹配异常 EInvalidCast 当试图用 As 操作符把一个对象与另一类对象匹配失败后引发。 类型转换异常 类型转换异常 EConvertError 当试图用转换函数把数据从一种形式转换为另一种形式时引发,特别是当把一个字符串转换为数值时引发。 下 面程序中的两条执行语句都将引发一个 EConvertError 异常。 var rl : Real。 int: Integer。 begin rl := StrToFloat(39。 $39。 )。 int := StrToInt(39。 1,402 39。 )。 end。 要注意并不是所有的类型转换函数都会引发 EConvertError 异常。 比如函数 Val当它无法完成字符串到数值的转换时只把错误代码返回。 利用这一点我们在 ()节中实现了输入的类型和范围检查。 硬件异常 硬件异常发生的情况 有两种:或者是处理器检测到一个它不能处理的错误,或者是程序产生一个中断试图中止程序的执行。 硬件异常不能编译进动态链接库(DLLs)中,而只能在标准的应用中使用。 硬件异常都是 EProcessor 异常类的子类。 但运行时间并不会引发一个EProcessor 异常。 表 硬件异常类及其产生原因 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 异常类 引发原因 ───────────────────────────────── Efault 基本异常类。 是其它异常类的父类 EGPFault 一般保护错。 通常由一个未 初始化的指针或对象引起 EStackFault 非法访问处理器的栈段 EPageFault Windows 内存管理器不能正确使用交换文件 EInvalidOpCode 处理器碰到一个未定义的指令。 这通常意味着处理器 试图去操作非法数据或未初始化的内存 EBreakPoint 应用程序产生一个断点中断 ESingleStep 应用程序产生一个单步中断 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ EFault、 EGPFault 往往意味着 致命的错误。 而 EBreakPoint、 ESingleStep被 Delphi IDE 的内置调试器处理。 事实上前边的五种硬件异常的响应和处理对开发者来说都是十分棘手的问题。 对象异常类 所谓对象异常是指非部件的对象引发的异常。 Delphi 定义的对象异常包括流异常、打印异常、图形异常、字符串链表异常等。 流异常类 流异常类包括 EStreamError、 EFCreateError、 EFOpenError、 EFilerError、EReadError、 EWriteError、 EClassNotFound。 它们的结构关系如下: EStreamError | EFCreateError | EFOpenError | EFilerError | EReadError | EWriteError | EClassNotFound 图 流异常结构图 流异常在 Classes 库单元中定义。 流异常引发的原因如表。 表 流异常类及其产生原因 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 异常类 引发原因 ───────────────────────────────── EStreamError 利用 LoadFromStream 方法读一个流发生错误 EFCreateError 创建文件时发生错误 EFOpenError 打开文件时发生错误 EFilerError 试图再次登录一个存在的对象 EReadError ReadBuffer 方法不能读取特定数目的字节 EWriteError WriteBuffer 方法不能写特定数目的字节 EClassNotFound 窗口上的部件被从窗口的类型定义中删除 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 打印异常类 打印异常类 EPrinter当打印发生错误时引发。 它在 printers库单元中定义。 例如你的应用程序试图向一个不存在的打印机打印或由于某种原因打印工作无。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。