欢迎来到天天文库
浏览记录
ID:42910577
大小:55.50 KB
页数:5页
时间:2019-09-23
《第7章异常处理与程序调试技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第7章异常处理与程序调试技术本章重点异常的概念并常处理的语法程序调试方法一、异常的概念所谓异常是指程序在运行时遇到的一些无法预知,需要特别处理的状况。例如程序要打开一个不存在的文件、网络连接屮断、操作数越界、装载一个不存在的类等问题。二、Delphi的异常处理机制Delphi提供了一套默认的口动界常处理机制,即当程序发生错误后会口动退岀当前运行的程序模块,并以对话框的形式给出相应的错谋信息,但是并不会引起应用程序的非法终止。Delphi的界常处理机制是建立在保护块的概念上的。保护块是用保留字try和end封装起來的
2、一段代码。当应用程序发生错谋时,系统会自动创建相应的异常类的对象,该异常对彖通常包含了错误的相关信息。程序可以捕获并处理这个异常对彖,如果程序中没有定义対该界常的处理,则系统会口动产生一个消息框來描述这个错误,并保证程序不会非法终」上。三、异常类在Delphi中,所有的异常类都派生自Exception类,该类是在SysUtils单元中定义的,如果一个程序的Uses语句中包含了SysUtils单元,则运行中发牛错误时就会引发一个异常。需要注意的是,异常不同于错误,编程者可以引发一个自定义异常。例如:RaiseExce
3、ption・Create(fMyError1;异常处理的语法Delphi提供了两种处理异常的基本结构:try…except和try...finallyo前者主耍用于编写异常处理代码,后者主要用于保护系统资源。一、try...except...endtry...except...end形成一个异常响应保护块。正常情况下except后面的语句并不会被执行,而当一条或多条try块中的语句执行失败时,则发牛异常,程序口动跳到except块中,进入异常响应处理模块中去执行。当异常被响应后异常类自动清除。二、try...exc
4、epton…do…end这种异常响应保护块通过使用on…do来响应不同类型的异常,其中onZ后为异常的类型。例如:varI,JrK:Integer;beginTryI:=StrToInt(Editl.Text);J:=StrToInt(Edit2.Text);K:=IdivJ;Edit3•Text:=tToSti:(K);ExceptOnEDivByZerodoShowMessage("除数为0!');OnEConvertErrordoShowMessage(1数据类型错误!*);end;end;说明:①如果未编写
5、异常处理结构,当发生异常时,VCL将调用默认的异常处理程序,通常会显示一个消息框,显示与对应的异常冇关的错误信息。②即使为可能出现的异常编^7try...except结构,在Delphi开发环境中运行调试程序时,系统仍然会在出现界常的代码处中断程序运行(此时可执行菜单命令【Run〔ProgramReset]返冋设计状态)。对于这样的程序,可先编译、保存,然片直接执行编译厉的可执行文件。③父类异常可以对子类异常做出响应。例如,Exception类可以响应所有异常。如果在except块中含有多行on・・・do子句,应注
6、意它们的继承层次关系。若各子句屮的异常类之间存在直系继承关系,应将后代了句置前,祖先了句置后。否则,处于低层次的异常了类处理子句将不被执行。三、try...finally...end显示错误消息是异常处理的一个方面,当错误发牛时,还应该保证系统的稳定,如及时释放己经分配的资源,避免系统的崩溃等,对以采用try...finally...end结构实现。Finally之灰的语句无论如何都会被执行,因此可以用于资源保护。例如,以下程序段存在缺陷:varP:Pointer;I,J:integer;BeginI:=0;Get
7、Mem(P,2048);//为指针P分配2K内存J:=5divI;FreeMem(P,2048);//释放为指针P分配的内存End;当运行到语句“J:=5divI;”时,因1=0会产生被0除的异常。此时程序会从异常发牛点退出当前程序块,FreeMem语句没有执行的机会,从而导致为指针P分配的内存未被释放。采用try...finally...end结构可解决此问题:varP:Pointer;I,J:integer;BeginI:=0;GetMem(P,2048);TryJ:=5divI;FinallyFreeMem(
8、P,2048);End;End;与try...except结构不同,无论是否发牛异常‘finally块中的语句均会执行,从而保护系统资源。四、资源保护与异常处理的结合try...finally结构用于保护资源,但不对异常进行任何处理。可以将try...except和by…finally结构和结合,构成嵌套的try结构,既处理异常,又保护资源。一般格式如下:.
此文档下载收益归作者所有