chapt异常处理_第1页
chapt异常处理_第2页
chapt异常处理_第3页
chapt异常处理_第4页
chapt异常处理_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Keep on walkingKeep on walking杨丽敬杨丽敬Delphi程序设计工学结合特色精品课程第_七_模块 本模块题目:程序的异常处理和调试主要教学内容和课时分配(请注明:* 重点 # 难点 ):1.程序错误与处理2.调试技术 1、2共1课时3.异常处理机制 * 1课时教学目的要求:掌握异常处理机制;教学方法和教学手段:教学方法运用了多媒体课件讲授、开发进度讨论、代码编写示教、系统分析指导等。教学手段采用板书、多媒体、模型、示例等教学工具。讨论、思考题、作业:实训题目1:利用Try-except及Try-finally语句进行程序设计,体现在设计的系统中 2课时备注:Chap

2、8 Chap8 异常处理异常处理程序错误与处理程序错误与处理调试技术调试技术异常处理机制异常处理机制异常类异常类发现程序错误语法错误(syntax error 包括设计期和编译期产生)又称编译错误,编写的语句不符合语法规范。运行错误(run-time error)程序虽然通过了编译,但执行时却发生了无效操作,即运行错误。逻辑错误(logic error)已通过编译,也没出现运行错误,但运行结果与期望值不一样,则程序出现了逻辑错误。启用调式器选择Tools| Debugger Option菜单项,在出现的对话框中选中复选框Integerated Debugger即可设置编译环境选择Tools|

3、Environment Options菜单项,在出现的对话框中和在project | options进行设置程序错误与处理*Delphi的编译信息分类Delphi的编译信息分为4类:Fault(故障),Error(错误),Warning(警告)和Hint(提示)。Fault是指导致编译程序不能继续工作的错误,例如内存溢出等;Error是指发现用户程序不符合某些规定而导致不能按照用户程序的要求进行处理;Warning是指用户程序使用了某些不符合规定的形式,但是并不影响编译程序生成目标文件;Hint是指编译程序对用户程序的某些形式提出了怀疑。 错误例一对于下面这个代码,编译程序将会出现一个Warn

4、ing:vara,b:Integer;begin.if a100 thenif ab then begin.end;end.end. 编译程序会告诉你,在“.”(句号)后面的内容被忽略了,实际上你会发现你漏了一个begin,同时将最后第二个end后面的“;”(分号)误写成“.”(句号)了。Warning Project2.dpr(20): Text after final END. - ignored by compiler 错误例二vara,b:Integer;beginb:=a+1;end; 编译程序会给出一个Hint,暗示a尚未被初始化,通常没有被初始化的变量其内容是不确定的。 Warn

5、ing Project2.dpr(12): Variable a might not have been initializedHint Project1.dpr(11): Value assigned to b never used调试技术最基本、最重要的调试手段包括:单步跟踪、断点、变量观察等。所有这些功能在Delphi的集成调试程序中都能提供。当按下F9(Compile and Run,编译并运行)一个程序时,就已经启动了Delphi的集成调试程序,而按下Ctrl+Break(Program Pause,程序暂停)时则会暂停被调试程序返回到集成调试程序中去,再次按下F9会从暂停地地方继续

6、执行,而Alt+F2(Program Reset,程序复位)则会完全中止被调试程序的执行,返回集成调试程序中去。单步跟踪(单步跟踪(StepStep)所谓单步跟踪是指一行一行地执行程序,每执行一行语句后就停下来等待指示,这样你就能够仔细了解程序的执行顺序,以及当时的各种状况。 见example8_1注意:虽然Object Pascal允许在一行内书写任意多的语句,但是所有的单步跟踪都以“行”为单位,因此为了便于调试,主张在一行内只写一条语句,否则会给你调试带来很大的麻烦。单步跟踪可以分为Step Over(跳过)、Trace Into(跟踪进入)和Trace to Next Source Li

7、ne(跟踪到下一条源代码行)。Step Over和Trace Into都是执行一行语句,差别在于遇到过程和函数时Trace Into将会进入过程和函数,而Step Over不会,而只会把过程和函数作为一条语句执行。当使用Ctrl+Break暂停程序时,程序不一定停在你的源代码位置上,而可能是在操作系统或者其它模块中,此时集成调试程序会出现一个CPU窗口(CPU Window),用汇编指令的形式显示当前的内容,可以用Trace to Next Source Line继续执行程序,直到程序执行到第一条有源代码的地方。断点(断点(BreakpointBreakpoint)断点是调试中非常重要的一个手

8、段。由于在执行到某些代码前需要执行许多其它代码,不可能用单步跟踪一条一条执行过来,这时只要在需要暂停的地方设置一个断点,然后让程序运行,当执行到这个断点位置时不需要用户干预就会暂停并返回集成调试程序。Delphi提供了丰富的断点功能,包括:源代码断点、指令断点、数据断点等。断点的使用断点的使用设置断点设置断点 设置断点首先在Code Editor中选定你想设置断点的代码行,而后进行如下的任一种操作: 单击选定代码行左边的空白 按F5 选择Code Editor加速菜单的Toggle BreakPoint项 选择Run|Add Breadpoint打开断点编辑对话框(Edit BreakPoin

9、t Dialog Box) ,而后选择New去确认一个新的断点设置或选择Modify去对一个存在的断点进行修改 从BreakPoint List加速菜单中选择Add BreakPoint项 断点必须位于可执行代码行上,凡设置在注释、空白行、变量说明上的都是无效的。另外,断点既可以在设计状态下设置也可以在运行调试状态下设置。 断点的操作断点的操作 断点列表窗口(BreakPoint List Window)列出了所有断点所在的源文件名、行号、条件以及已通过的次数。如果一个断点非法或失去功能,则在列表窗口中变灰。 断点列表窗口可以通过选择View|BreakPoint菜单打开。断点列表窗口是断点操

10、作的基础。 1.显示和编辑断点处的代码 利用断点列表窗口可以快速找到断点在源代码中的位置。 首先选定断点而后从加速菜单中选择View Source或Edit Source。此时Code Editor更新,显示该断点位置处的代码。如果选择的是View Source,则断点列表窗口仍保持活动;如果选择的是Edit Source,则Code Editor获得输入焦点,可以在断点位置修改源代码。 2. 断点功能的丧失和恢复 使断点失去功能可以使断点从当前程序运行中隐藏起来。假如你定义了一个断点当前并不需要,但可能在以后使用,则这一功能是很有用的。断点列表窗口加速菜单的Disable BreakPoin

11、t和Disable All BreakPoints项可以使当前选中断点或所有断点失去功能。加速菜单中的Enable BreakPoint和Enable All BreakPoint 可以使相应断点恢复功能。 3. 断点的删除 断点删除可以从Code Editor或断点列表窗口中进行。 从Code Editor: 把光标停到包含断点的行并按F5( 或选择加速菜单的Toggle BreakPoint) 单击包含断点行左边的终止符 从断点列表窗口: 选中欲删除的断点并选择加速菜单的Delete BreakPoint项 删除当前所有断点,则选择加速菜单的Delete All BreakPoints项修

12、改断点属性修改断点属性 断点列表窗口双击选定断点或从加速菜单中选择Edit BreakPoint项,可以打开断点编辑对话框,用于显示和修改断点的属性。利用断点编辑对话框可以改变断点的位置,设置断点条件。 断点条件包括两种:布尔表示式和通过次数。 Condition编辑框用于设置布尔表达式条件。如果表达式值为真( 或非零)则程序运行在断点处中止;否则调试器将忽略该断点。Pass Count编辑框用于设置通过次数条件,即只有当程序运行在该断点处通过设定次数时程序运行才在该断点处中止。这往往用于对循环体内语句的调试。 有一点应引起注意的是:当Condition和Pass Count同时设置时,Pas

13、s Count是指满足条件的通过次数。对如下一段程序: var i,Re,s: Integer ; begin s := 1; Re := 0; for i:=1 to 100 do Re:=Re+s*i ; end; 在 Re := Re + s*i;一行设置一断点。 若条件设置为: Condition :i = 3 Pass Count: 4 则当程序中止时检测i 的值为? 断点和程序执行点颜色的设置断点和程序执行点颜色的设置 选择Option|Environment进入环境设置对话框,此时即可对有关项按自己的希望设置背景和前景色。监视数据的值监视数据的值 内置调试器提供了如下的工具用于监

14、视程序中数据的值: 监视列表窗口 计算/修改对话框 调栈窗口监视表达式监视表达式 监视列表窗口(Watch List Window)显示程序运行中当前监视表达式的值。 选择View|Watches可以打开监视列表窗口。 从Code Editor中添加一个监视表达式最方便的方法是: 1.选中要监视的表达式; 2. 从Code Editor加速菜单中选择Add Watch把表达式添加到监视列表窗口。 也可以利用下面的方法产生一个监视表达式: 1.用下列方法之一打开监视属性对话框(Watch Properties Dialog Box) : 主菜单中选择Run|Add Watch 在光标处从Code

15、 Editor加速菜单中选择Add Watch 按CtrlF5 双击监视列表窗口中的一个监视表达式 从监视列表窗口选定一个表达式而后从加速菜单中选择Edit 2.在监视属性对话框的Expression下拉列表框中输入或选择一个被监视的表达式; 3.设定表达式的显示格式和使能状态。 与断点类似,利用加速菜单也可以使监视表达式功能丧失、恢复或删除监视表达式。计算计算/ /修改表达式修改表达式 选择Run|Evaluate /Modify可打开计算/修改对话框。当单击Evaluate按钮时,Expression编辑框中表达式的值显示在Result域中。Expression中可以输入或选择任何合法的表

16、达式( 包括对象的属性) ,但不包括; 1. 包含有当前执行点不能引用的局部或静态变量的表达式; 2. 函数或过程调用。 Expression中的表达式可以带特定的格式字符用于规定其显示格式。* *显示函数调用显示函数调用 选择View|Call Stack可以显示调栈窗口(Call Stack Window) 。调栈窗口的顶端列出了应用程序最近的函数调用。 利用调栈窗口可以退出当前跟踪的函数,可以利用加速菜单项显示或编辑位于特定函数调用处的源代码其它调试工具其它调试工具 Delphi的内置调试器虽然功能很强大,但并不能胜任所有的任务。同时由于内置调试器在执行中引起程序环境的细微变化,所以可能

17、影响错误的发生方式。为此我们需要使用其它调试工具来完成我们的任务。这些调试工具包括Turbo Debugger、WinSight、WinSpector和Browser。Browser等。异常概述异常(Exception)是一种特殊的事件,通俗地讲就是错误。异常响应异常保护异常保护处理程序可保证代码执行以后分配的资源能被释放 ,将欲保护的代码放于tryfinally块中。Try 语句序列1;Finally语句序列2;End;编写异常处理程序见example8_3try语句序列1;excepton 标识符: 异常类 do 语句1; on 标识符: 异常类 do 语句2;else语句序列;end;异常处理机制with TDialogAbout.Create(nil) dotryShowModal;finallyFree;end; Exception类运行时间库异常n外部错误异常类EExternaln类型匹配异常类EInvalidCast n类型转换异常类EConvertError nI/O异常类EInOutError n堆异常类EHeapException 对象异常类n流异常类EStreamError n打印异常类EPrinter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论