第7章程序异常处理与调试技术精选文档.ppt

上传人:石*** 文档编号:69584998 上传时间:2023-01-07 格式:PPT 页数:17 大小:917KB
返回 下载 相关 举报
第7章程序异常处理与调试技术精选文档.ppt_第1页
第1页 / 共17页
第7章程序异常处理与调试技术精选文档.ppt_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《第7章程序异常处理与调试技术精选文档.ppt》由会员分享,可在线阅读,更多相关《第7章程序异常处理与调试技术精选文档.ppt(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第7章 程序异常处理与调试技术本讲稿第一页,共十七页第第7章章 程序异常处理与调试技术程序异常处理与调试技术 7.17.17.17.1 异常异常异常异常处处处处理理理理 7.1.1 7.1.1 7.1.1 7.1.1 使用使用使用使用Try-ExceptTry-ExceptTry-ExceptTry-Except语语语语句句句句处处处处理异常理异常理异常理异常 7.1.2 Try_Finally 7.1.2 Try_Finally 7.1.2 Try_Finally 7.1.2 Try_Finally 结结结结构构构构 7.1.3 7.1.3 7.1.3 7.1.3 异常基类及其属性和主要方法

2、异常基类及其属性和主要方法异常基类及其属性和主要方法异常基类及其属性和主要方法 7.1.4 Raise 7.1.4 Raise 7.1.4 Raise 7.1.4 Raise语句和异常处理的重引发语句和异常处理的重引发语句和异常处理的重引发语句和异常处理的重引发 7.27.27.27.2 程序程序程序程序调试调试调试调试 7.2.1 7.2.1 7.2.1 7.2.1 调试调试调试调试的准的准的准的准备备备备 7.2.2 7.2.2 7.2.2 7.2.2控制程序的控制程序的控制程序的控制程序的执执执执行行行行 7.2.3 7.2.3 7.2.3 7.2.3 使用断点使用断点使用断点使用断点

3、7.3.4 7.3.4 7.3.4 7.3.4 监视监视监视监视数据的数据的数据的数据的值值值值 小结小结小结小结本讲稿第二页,共十七页第第7 7章章 程序异常处理与调试技术程序异常处理与调试技术 在Delphi中有两种程序错误,一种是编译错误,在程序编辑阶段就可以由编译器发现并给出提示。另外一种是运行错误,这类错误不能在编译阶段查出,只能在程序执行时发现,称为运行错误。Delphi提供了一种机制来处理运行错误,保护程序的正常执行,这种机制就是异常处理。异常处理的方法是把正常的执行程序同错误的处理程序分离开来,这样可以保证在没有错误时,程序正常执行,当发生错误时,执行错误处理部分的程序,然后程

4、序跳出保护模块,继续执行后续的程序。7.1 7.1 异常处理异常处理 对于在应用程序中经常产生的异常,Delphi都进行了定义。如在SysUtils单元中定义了类型转换异常(EConvertError),数学异常(EMathError),输入输出异常(EInOutError)等;在ComCtrl单元定义了日期异常(EDateTimeError),在Db单元中定义了数据库异常(EDatabaseError),等。因此只需在单元中引用这些系统库单元就可以处理这些异常 本讲稿第三页,共十七页7.1.1 7.1.1 使用使用Try-ExceptTry-Except语句处理异常语句处理异常 Try_Ex

5、cept 的一般结构为:TryTry/需要进行异常检测的语句序列 ExceptExcept /发生异常时的错误处理模块 End;End;/异常定义结束数学异常类在系统的数学异常类在系统的SysUtilsSysUtils中声明,其定义形式为:中声明,其定义形式为:typetype EMathError=class(Exception);/由Exception类派生,是所有浮点数据错误的基类 EInvalidOp=class(MathError);/无效的操作的指令 EZeroDivide=class(MathError);/被零除 EOverflow=class(MathError);/浮点数操

6、作上溢 EUnderflow=class(MathError);/浮点数操作下溢 EinvalidArgument=class(MathError);/无效的参数End;End;本讲稿第四页,共十七页一般有三种处理方式:1不管发生什么异常,使用统一的错误处理方式 TryTry /需要检测的语句,例如可以是 X:=Y/Z ExceptExcept HandleALLException;End;End;2某些异常使用特殊的处理方式,而其余的异常使用统一的处理方式。对于一些可以预测的错误,使用更为详细的处理方式。例如:Try Except On EZeroDivide Do HandleZeroDi

7、videError /处理被零除错误 On EOverflow Do HandleOverflowError /处理溢出错误 On EMathError Do HandleMathError /处理其他数学异常 Else HandleAllOtherError /前面没有被处理的异常则由该程序负责处理 End;本讲稿第五页,共十七页 3只检测某些错误异常,不管其他的异常情况。7.1.2 Try_Finally 7.1.2 Try_Finally 结构结构Try_Fianally 的一般结构为:TryTry /需要保护的程序语句序列FinallFinally /一定执行的语句序列 End;End

8、;例如打开一个文件并进行处理,在处理完成后必须关闭文件。则可以使用类似下面的结构。VarVar TxtFile:TextFile;/定义文本文件变量存放打开的文件名字 Begin Begin IfIf(OpenDialog1.Execute)Then /Then /使用文件打开对话框 BeginBegin TryTry AssignFile(TxtFile,OpenDialog1.FileName);/打开新选择的文件 Append(TxtFile);/设置文件为追加方式 本讲稿第六页,共十七页 Writeln(TxtFile,异常检测的例子);/向文件中添加一行文本 Flush(TxtFil

9、e);/保证新内容写入文件 finallyfinally CloseFile(TxtFile);/关闭打开的文件end;end;end;end;end;end;7.1.3 异常基类及其属性和主要方法 在Delphi中,所有异常的基类是Exception类。该类是所有其他异常类的祖先,即所有其他的异常类都是由该类派生而来。例如前面的EmathError类即是由该类派生而来。1xception属性(1)Exception.HelpContext属性(2)Exception.Message属性 2exception方法(1)Exception.Create方法(2)Exception.CreateF

10、mt方法(3)Exception.CreatHelp方法 本讲稿第七页,共十七页7.1.4 Raise7.1.4 Raise语句和异常处理的重引发语句和异常处理的重引发 除了使用前面介绍的Try_Except和Try_Finally结构来提交异常并进行处理外,Delphi中还可以使用Raise来提交异常,格式如下:Raise Object At Address【例【例7.17.1】异常处理的示例,使用Try_Except和Raise语句提交异常(1)界面设计 (2)对象属性设置(3)程序设计Function Function StrToIntRange(const S:string;Min,M

11、ax:Longint):Longint;beginbegin Result:=StrToInt(S);/StrToInt is declared in SysUtils ifif(Result Max)thenthen raise raise ERangeError.CreateFmt(发生错误,%d 不在%d.%d 之内,Result,Min,Max);/由Raise提交异常end;end;本讲稿第八页,共十七页function beInt(const strVal:string):boolean;begin try StrToInt(trim(strVal);Result:=true;ex

12、cept Result:=false;/表示结果不正确 raise;/再次提交异常异常重引发 end;end;procedureprocedure TForm1.Button1Click(Sender:TObject);varvar x,y,z:single;beginbegin y:=100;z:=0;/变量赋初值trytry x:=y/z;showmessage(FloatToStr(x);/显示正确的结果exceptexcept on on EZeroDivide dodo showmessage(除数为零!);/处理被零除错误elseelse showmessage(发生错误!);/处

13、理其他错误end;end;end;end;本讲稿第九页,共十七页procedure TForm1.Button2Click(Sender:TObject);var Ptr:pointer;/指针变量num:single;begin GetMem(Ptr,1024);/申请1024字节内存空间 try num:=StrToFloat(1234a);/产生转换错误 Finally FreeMem(Ptr,1024);/释放申请的内存空间 End;end;procedure TForm1.Button3Click(Sender:TObject);begin StrToIntRange(100,0,9

14、9);/调用过程产生异常end;procedure TForm1.Button4Click(Sender:TObject);var SucStr,ErrStr,Str:string;begin Str:=123.234;ErrStr:=Str+不是一个有效的整数;/错误提示字符串 SucStr:=该整数是+Str;/正确提示字符串 本讲稿第十页,共十七页try if(BeInt(Str)Then ShowMessage(Pchar(SucStr)/显示正确信息except ShowMessage(pchar(ErrStr);/报告发生异常显示错误信息end;end;(4)程序运行结果 本讲稿第

15、十一页,共十七页7.2 7.2 程序程序调试调试 Delphi提供了一个功能强大的内置调试器(Integrated Debugger)来帮助对程序的运行状态进行跟踪和调试。该调试器可以方便的查找程序中出现的运行时间错误和逻辑错误。7.2.1.调试的准备 调试的准备工作有下面几个方面:1激活内置调试器 要能对程序进行调试,首先必须使内置的集成调试器处于活动状态。方法是:在Delphi集成开发环境中,选中Tools|Debugger Options菜单General页的Integrated Debugging复选框。缺省情况下该框被选中。2设置编译和调试选项 缺省情况下,Delphi对有些错误和信

16、息不给出调试信息。可以改变Delphi的缺省设置。单击Project-Options菜单,选择Compiler页。如图所示。本讲稿第十二页,共十七页 (1)Runtim Errors区域 (2)Debugging区域 (3)Messages 区域3编译程序发现编译错误 在调试之前,必须先编译通过。可以选择Project-Complie 可以对工程进行编译,检测编译错误。也可以按Ctrl+F9执行同样的操作。缺省情况下,如果有错误或是警告和提示信息则显示在Message列表框中。本讲稿第十三页,共十七页 7.2.2.控制程序的执行 Delphi程序的调试命令都集中在RUN菜单下。可以三种方式进行

17、调试:Step Over(F8)单步执行调试、Trace Into(F7)跟踪调试或使用Run To Cursor(F4)运行到光标所在处。7.2.3 使用断点 断点(BreakPoint)就是使程序运行中断的点。在一个应用程序总可以设置多处断点,当程序运行到断点处,会暂停执行,等待进一步的命令。1断点的设置 有多种方法可以设置断点:(1)单击选定代码行左边的空白 (2)在光标所在的行处按F5 (3)使用Run|Add Breadpoint|source breakpoint 打开断点编辑对话框,在Line Number处输入需要加断点的行号即可。2断点的删除和设置 (1)利用断点列表窗口可以

18、快速找到断点在源代码中的位置。(2)断点功能的失效和恢复3.修改断点属性 7.2.4 监视数据的值本讲稿第十四页,共十七页1监视表达式选择【View】【Debug Windows】【Watches】可以打开监视列表窗口【Watch List】。在该窗口中单击鼠标右键,在弹出的快捷菜单中选择【Add Watch】打开监视属性对话框,可以添加新的变量或表达式。如图所示。本讲稿第十五页,共十七页 2计算/修改表达式 选择【Run】【Evaluate/Modify】可打开计算/修改对话框。如图7-4所示。3函数调用 4观测局部变量 本讲稿第十六页,共十七页本章小结:本章小结:本章主要有两个方面的内容。异常处理和程序调试。在异常处理中介绍了几种异常处理的方法,主要需要掌握的有Try-Except 结构try_Finally结构,Raise语句的用法和异常的重引发。程序的调试重要有断点的设置及其属性修改,利用单步、跟踪调试技术调试程序。监测变量以及表达式的值。本讲稿第十七页,共十七页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com