异常处理与程序调试(一)

2016-01-29 14:06 5 1 收藏

异常处理与程序调试(一),异常处理与程序调试(一)

【 tulaoshi.com - Delphi 】

 
在应用程序开发中如何检测、处理程序的运行错误是一个很重要的问题。在 Delphi 的集成开发环境( IDE )中提供了一个完善的内置调试器,可以帮助你发现大部分程序错误。但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符、磁盘不能读写等。这些情况不仅会导致应用程序异常中止而且可能引起系统的崩溃。针对这些问题,Delphi同时提供了一套强大的异常处理机制。巧妙地利用它,可以使你的程序更为强健,使用更为友好。

  虽然Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。但当应用程序执行的过程性很强时,仅仅利用这种方法是不够的,而且很容易导致程序执行的不可预测性。 

12.1 Delphi异常处理机制与异常类 

  Delphi异常处理机制建立在保护块(Protected Blocks) 的概念上。所谓保护块是用保留字tryend封装的一段代码。保护块的作用是当应用程序发生错误时自动创建一个相应的异常类(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);. . .

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

destructor Destroy; override;

property HelpContext: Longint

property Message: String;

property MessagePtr: PString;

end; 

Exception的一系列构造函数中最重要的参数是显示的错误信息。而数据成员中最重要的也是可被引用的消息字符串(messagemessagePtr) 。 这些信息分别对自定义一个异常类和处理一个异常类有重要作用。

  Delphi提供了一个很庞大的异常类体系,这些异常类几乎涉及到编程的各个方面。从大的方面我们可以把异常类分为运行时间库异常、对象异常、部件异常三类。下面我们分别进行介绍。 

12.1.1 运行时间库异常类(RTL Exception) 

  运行时间库异常可以分为七类,它们都定义在SysUtils库单元中。 

12.1.1.1 I/O异常 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

  I/O异常类EInOutError是在程序运行中试图对文件或外设进行操作失败后产生的,它从Exception派生后增加了一个公有数据成员ErrorCode,用于保存所发生错误的代码。这一成员可用于在发生I/O异常后针对不同情况采取不同的对策。

  当设置编译指示{$I- } 时,不产生I/O异常类而是把错误代码返回到预定义变量IOResult中。 

12.1.1.2 堆异常 

  堆异常是在动态内存分配中产生的,包括两个类EOutOfMemoryEInvalidPointer。

表12.1  堆异常类及其产生原因

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

异常类 引发原因

─────────────────────────────────

EOutOfMemory 没有足够的空间用于满足所要求的内存分配

EInvalidPointer 非法指针。一般是由于程序

来源:https://www.tulaoshi.com/n/20160129/1492549.html

延伸阅读
标签: 电脑入门
在Linux系统操作中,经常会遇到多进程调试的问题,其实多进程的调试没有想象中的那么复杂,下面图老师小编就给大家介绍下Linux如何调试多进程程序,感兴趣的朋友不妨来了解下。 多进程的调试: (1)follow-fork-mode set follow-fork-mode [parent | child] fork之后选择调试父进程还是子进程 (parent: fork之后继续调试父进...
标签: PHP
调试程序是一个漫长的过程,程序越长越复杂,调试起来就愈加困难。如果你调试的是php程序,那么不妨采用phpUnit,它可以大大加快你的调试速度。 何谓PhpUnit Phpunit 脱胎于Fred Yankowski编写的著名的Junit测试框架。你可以到它的网站 http://www.ontosys.com/phiki/phpunit 下载最新的版本。你可以利用phpUnit编写一套...
五十七、只针对异常情况才使用异常:       不知道你否则遇见过下面的代码: 代码如下:      try {               int i = 0;3        while (true)       ...
16.1、简介: 异常是程序执行时遇到的任何错误情况或意外行为。 以下这些情况都可以引发异常:您的代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码),等等 《Exception Handling for C++》关于异常处理论文, 向对象中每增加一个类,都可能包含一些错误。 ...
标签: 电脑入门
显卡硬件安装完成只相当于显卡的安装工作完成了一半,驱动程序的安装与设置就是显卡安装的另一半。只有安装完成显卡的驱动程序,显卡的显示核心的所有功能才会启动,显卡才会提供给我们绚丽的画面。 在学习显卡驱动设置之前,我们先来回答两个常见问题: 问:为什么桌面显示正常,但就是不能玩游戏? 答:在Windows中其实会自带一些显卡的驱...

经验教程

102

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部