欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    第6章Delphi程序异常处理与调试技术概要.docx

    • 资源ID:15724612       资源大小:29.03KB        全文页数:11页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第6章Delphi程序异常处理与调试技术概要.docx

    1、第6章Delphi程序异常处理与调试技术概要第六章 程序异常处理与调试技术在Delphi中有两种程序错误,一种是编译错误,在程序编辑阶段就可以由编译器发现并给出提示。另外一种是运行错误,这类错误不能在编译阶段查出,只能在程序执行时发现,称为运行错误。 Delphi提供了一种机制来处理运行错误,保护程序的正常执行,这种机制就是异常处理。异常处理的方法是把正常的执行程序同错误的处理程序分离开来,这样可以保证在没有错误时,程序正常执行,当发生错误时,执行错误处理部分的程序,然后程序跳出保护模块,继续执行后续的程序 。6.1 Object Pascal异常的种类 异常的种类:Delphi内建的异常类,

    2、程序员自定义的异常类。异常基类及其属性和主要方法:在Delphi中,所有异常的基类是Exception类。所有其他异常类都是由该类派生而来。 1 exception属性该类有两个基本属性:HelpContext和Message。(1)Exception.HelpContext属性 该属性的定义如下: Type ThelpContext= -MaxLongint.MaxLongint; Property HelpContext:ThelpContext;HelpContext是ThelpContext类的一个实例,它提供了与异常对象联系在一起的上下文相关帮助信息的序列号。该序列号决定当发生异常时

    3、用户按F1键显示的一个异常错误的帮助信息。 (2)Exception.Message属性该属性的定义如下: property Message: string 该属性存储异常发生时的错误信息。可以通过该属性在提示错误对话框中显示错误信息字符串。2exception方法(1)Exception.Create方法该方法的定义形式为: Constructor Create(Const Msg: String);该方法用来产生一个带有一条简单提示信息的对话框,对话框中的提示内容由Msg提供(2)Exception.CreateFmt方法该方法的定义格式如下: Constructor CreateFmt(

    4、Const Msg:String;Const Args:Array of Const) ;该方法用来产生一个带有格式化字符串提示信息的对话框,格式化的字符串由Msg和Args数组共同提供,其中数组Args负责提供用于格式化的数值。(3)Exception.CreatHelp方法该方法的定义格式如下:Constructor CreateHelp(Const Msg:String; AhelpContsxt:Integer) ;该方法产生一个带有一条简单提示信息和上下文帮助序列号的提示对话框。其中Msg参数包含了显示在异常对话框中的运行错误信息。AhelpContext参数包含一个限定异常错误信息

    5、上下文帮助序列号。 6.1.1 Delphi内建的异常类 Delphi内建立异常类其标识符的第一个字母都是“E”,如此我们很容易就能辨认出此种类。6.1.2自定义异常类 自定义的异常类必须继承内建的Exception类,或者继承Exception的某个子类才行。除此之外,自定义异常类的语法和自定义一般类的语法并没有不同 。6.2触发异常的方法触发异常的方法,主要可分为两种,一种是由程序系统自动触发,一种则是利用raise指令触发6.2.1由程序系统自动触发 只要属于Delphi内建类的异常产生时,程序系统就会在当下自动触发它们,并捕捉其信息,然后将异常的信息以对话框显示出来,这些是一般公认的异

    6、常状况,即使我们不对这些异常做处理,程序系统也会帮我们做处理,然后让程序再继续执行下去,这样程序就不会在当时异常中断,而出现意料之外的问题。不过程序系统所作的只是一般的处理,通常仅是避开执行会发生异常的程序代码,而不会排除掉异常发生的原因。故若保持原来的状态再做同样的执行操作,仍旧会触及同样的异常,却无法执行下一步的程序。因此为了让程序执行更顺畅,并且让用户更容易使用我们所开发的应用程序。即使是程序系统自动触发的异常,我们也应该主动去处理,设法去除导致异常的原因。或者给予用户更明确,更人性化的提示,尽量不要让用户感到任何操怍上的困难,并且避免异常重复发生而浪费不必要的时间。6.2.2使用rai

    7、se指令触发 自行触发异常的方式使用raise指令其语法如下: Raise 异常对象实体不要将raise指令当成一般语句使用,它必须配合异常处理语法来使用 。 6.3处理异常情况专门用来处理异常情况的语句主要有两种,一种是“try_ except_end”结构,另一种则是“try_finally_end”结构 。由于Delphi在程序设计时,提供了调试器(Debugger),因此当程序执行时若发生异常状况,调试器将发挥功能,让程序在异常发生点,并且提示调试的方法,方便找出问题所在。然而这样程序就无法如实展现异常处理的情况,而且这个应用程序若不在Delphi环境下执行,也不会有调试器存在。因此在

    8、设计异常处理程序时,点选【Tools】|【Debugger Options】|【General】选项,然后取消【Integrated debugging】选项,这样才能看到异常处理的效果6.3.1 TryFinallyEnd结构 TryFinallyEnd结构只需要触发异常,程序系统将自动捕捉被触发的异常,然后以信息对话框显示出异常的信息,让程序避开发生异常的程序代码,然后向下执行程序。无论在“TryFinaly”区内是否有异常被触发,都会接着执行“FindlyEnd”区的语句。然而若是在“TryFinally”区内有异常产生并被触发时,就会由异常发生点跳转此区域,转而执行“FinallyEn

    9、d”区的所有语句。 例:procedure Form1.Button1Click(Sender:TO b j e c t ) ; Var MyStringList:TStringList;begin MyStringList:= TStringList.Create; try MyStringList.Assign(ListBox1.Items); finally MyStringList.Free; end;end;包括由程序系统自动触发以及程序员使用raise指令去触发的异常,故在本区可根据状况条件来使用Raise指令。然而在本区使用raise指令,或者由程序系统自动触发某些异常时,程序系

    10、统并不一定会自动处理这些异常,这时程序就有可能会异常中断,因此需要“ExceptEnd”区中捕捉异常,并且对异常作适当处理;也可仿照“TryFinallyEnd”语法,在“ExceptEnd”区对“TryExcept”区内被触发的异常作再次触发(Reraise)的操作,即再次使用Raise指令,由程序系统自动捕捉异常,以信息对话框显示出异常信息,然后让程序避开异常,而不致于中断程序。6.3.2 “ExceptEnd”区中的语句在“ExceptEnd”区中,可以有多个语句,但此处主要是放置用来捕捉异常的语句,其目的是让程序仍自行捕捉异常,根据异常的类型决定要做的处理操作,而此种语句也有它特定的语

    11、法: On 异常对象标识符:类型 do /异常对象标识符可有可无 语句; /(on identifier:type do statement) 上述语法是表示当指定类型的异常被触发时,就执行保留字“do”后面这个语句。反之若没有这种类型的异常被触发,则不会执行“do”后面的语句。在捕捉异常的语句之后,还可以有一个“Else”区,在这个区域内可以有一般的语句(包括raise指令)。若本区域内没有“Else”区域时,只要其内有捕捉异常的语句存在,就不允许有一般语句(包括raise指令);倘若本区内若有“Else”区,则除了“Else”区域之外,并不允许有一般语句存在于“ExceptElse”区域,

    12、否则将导致编译错误。6.4 程序调试Delphi提供了一个功能强大的内置调试器(Integrated Debugger) ,该调试器可以方便地查找程序中出现的运行时间错误和逻辑错误。所谓运行时间错误是指程序能正常编译但在运行时出错。逻辑错误是指程序设计和实现上的错误。 6.4.1调试的准备 1激活内置调试器方法是:在Delphi集成开发环境中,选中【Tools】|【Debugger Options】|【General】页的【Integrated Debugging】复选框。默认情况下该框被选中。2设置编译和调试选项默认情况下,Delphi对有些错误和信息不给出调试信息。可改变Delphi默认设

    13、置。单击【Project】|【Options】|【Compiler】页。 (1)Runtime Errors区域Range checking:检查数组或是字符串的下标是否越界,默认时不检测。I/O checking:检测输入输出错误,默认检测Overflow checking:整型操作溢出检测,默认不检测。选中该复选框调试器将对整数运算是否溢出做检测,默认下不报告错误。(2)Debugging区域设置调试的信息。默认时几乎全部选中。一般无须改变该区域的选项设置。Debug information:表产生调试信息。如果Debug Information 选中会在单元文件 (.dcu) 中放置调试

    14、信息,文件字节变大但不影响速度。 Local symbols:产生局部变量的调试信息。Local Symbols选中会添加与所在类、过程、函数及对象方法中定义的标识符等有关调试信息。在程序调试时调试器会使用这些信息,但这些信息不会添加到可执行文件中。除非在【Project】|【Options】|【Linker】页面中选中【Include TD32 Debug Info】选项,选中了此选项就可以使用TD32来调试。Reference info/Definitions only:用来产生 供Code Browser, Code Explorer and Project Browser使用的标识符引

    15、用信息。如果Reference Info和Definitions Only 都被选中,则编译器将记录标识符定义位置信息。如果仅选中了 Reference Info,表示编译器不仅记录标识符定义的位置,同时将记录标识符被引用的信息。如果不选中Debug Information 和 Local Symbols 选项,仅选中该选项将不起作用。Assertions:产生断言的调试代码。Use Debug DCUs:使用连接的Dcu文件作为调试路径。必须在【Tools】|【Debugger Options】|【General】页中指定调试文件的路径。一般不选中该项。 (3)Messages 区域 Sho

    16、w Hints:使编译器产生提示信息。例如检测在过程或函数中声明了但一直没有使用的变量信息,或者无效的引用信息等。Show Warnings:使编译器产生警告信息。3编译程序发现编译错误在调试之前,必须先编译通过。可以选择【Project】|【Complie】 可以对工程进行编译,检测编译错误。也可以按【Ctrl+F9】执行同样的操作。默认情况下,如果有错误或是警告和提示信息则显示在Message列表框中。6.4.2 控制程序的执行 Delphi程序的调试命令都集中在RUN菜单下。可以三种方式进行调试:【Step Over(F8)】单步执行调试、【Trace Into(F7)】跟踪调试或使用、

    17、【Run To Cursor(F4)】运行到光标所在处。Step Over一次执行一行语句,碰到调用过程时也是一步就执行过去,不会跟踪到过程的内部代码中去逐行执行,Trace Into则是在碰到过程或函数时跟踪到它们的内部,可以对其内部代码进行调试。 Run To Cursor则从当前运行位置直接运行到光标所在的位置如果光标所在的位置和当前运行位置处在不同的事件代码中,则不能直接运行到光标处,只有当发生了该事件才可以继续执行。6.4.3 使用断点 断点(BreakPoint)就是使程序运行中断的点。在一个应用程序总可以设置多处断点,当程序运行到断点处,会暂停执行,等待进一步的命令。 1断点的设

    18、置(1)单击选定代码行左边的空白。(2)在光标所在的行处按【F5】。(3)使用【Run】|【Add Breadpoint】|【source breakpoint】 打开断点编辑对话框,在Line Number处输入需要加断点的行号即可。断点必须位于可执行代码行上,另外,断点既可以在设计状态下设置也可以在运行调试状态下设置。 一个有效(Enable)的断点默认的情况下该代码行显示为红色,正确的断点小圆点中是一个对号。2断点的删除和设置删除一个断点,只要再次在已经设置为断点的代码行单击其左侧的空白处或按【F5】键就可以删除断点。 如果一个应用程序许多位置都设置了断点,则可以使用断点列表框来管理所有

    19、的断点。使用【View】|【Debug】|【breakpoints】打开断点列表框,列表框将列出应用程序中设置的所有断点,无效(Disable)的断点前面的标志为灰色。在列表窗口中单击右键,将显示一个断点设置快捷菜单,使用该快捷菜单可以实现对断点的添加、删除、使有效以及无效等操作。(1)利用断点列表窗口可以快速找到断点在源代码中的位置(2)断点功能的失效和恢复在断点列表窗口单击右键,在快捷菜单中取消对Enable的选择或选择【breakpoints】|【Disable All BreakPoints】项可以使当前选中断点或所有断点失去功能。快捷菜单中的【Enable BreakPoint】和【

    20、Enable All BreakPoint】可以使相应断点恢复功能。同样快捷菜单中的【Delete BreakPoint】和【Delete All BreakPoint】 可以删除当前选中断点或所有断点。3修改断点属性在断点列表窗口选择断点后单击右键,在弹出的快捷菜单中选择Properties,则打开断点编辑对话框,用于显示和修改断点属性。 也可以使用【Run】|【Add Breadpoint】|【source breakpoint】打开该对话框。利用该对话框可以改变断点的位置,设置断点条件。断点条件包括两种:布尔表示式和通过次数。Condition编辑框用于设置布尔表达式条件。如果表达式值为

    21、真(或非零)则程序运行在断点处中止;否则调试器将忽略该断点。Pass Count编辑框用于设置通过次数条件,即只有当程序运行在该断点处通过设定次数时程序运行才在该断点处中止。同时设置时,Pass Count是指满足条件的通过次数。6.4.4 监视数据的值 1监视表达式选择【View】|【Debug Windows】|【Watches】可以打开监视列表窗口Watch List。在该窗口中单击鼠标右键,在弹出的快捷菜单中选择Add Watch打开监视属性对话框,可以添加新的变量或表达式。也可以使用【Run】|【Add Watch】打开监视属性对话框。在Expression右边的编辑框中添加要监测的

    22、变量或表达式,同时设置其属性。当该表达式代表一个数据元素时,可以在Repeat count中指定其重复次数。如果要监测的是一个数组的值,可以使用Repeat count指定数组元素的下标。 2计算/修改表达式选择【Run】|【Evaluate/Modify】可打开计算/修改对话框。 当单击Evaluate按钮时,Expression编辑框中表达式的值显示在Result域中。Expression中可以输入或选择任何合法的表达式(包括对象的属性),但不能包括;(1)包含有当前执行点不能引用的局部或静态变量的表达式;(2)函数或过程调用。Expression中的表达式可以带特定的格式字符用于规定其显

    23、示格式。 其表示语法格式为:变量名,格式字符串。 可使用的格式字符及其功能如下: H,X:以十六进制格式显示整型值 D: 以十进制格式显示整型值 C: 把ASCII码在0.31的特殊字等显示为ASCII码图形 Fn:用n个有效数字显示浮点数 nM: 以十六进制方式显示一变量的内存转储值,n限定要显示的字节数。 P: 以段和偏移量格式显示指针。两部分皆为四位十六进制值 Modify按钮可以修改特定表达式的值。一般修改表达式的值常用于验证错误解决方案的正确性。在Expression编辑框中输入欲修改的表达式,单击Evaluate按钮观察表达式的当前值。而后在New Value编辑框中输入或选中一个

    24、新值,单击Modify按钮确认并更新数据项。但一般不要修改指针和数组下标 单击Watch按钮可以打开监视列表窗口,并添加选定的表达式到列表窗口中。 单击Inspect 按钮可以为选择的数据元素打开一个信息的窗口,这对于观测数据结构、类和数组的值特别有用。 3函数调用 选择【View】|【Debug Windows】|【Call Stack】可以显示调栈窗口(Call Stack Window)。调栈窗口的顶端列出了应用程序最近的函数调用。利用调栈窗口可以退出当前跟踪的函数,可以利用快捷菜单项显示或编辑位于特定函数调用处的源代码。4观测局部变量 当调试的程序位于某一个过程或函数内部时,可以选择View|Debug Windows|local variables可以打开局部变量显示窗口。该窗口显示在该过程或函数内部使用的所有局部变量及其值。


    注意事项

    本文(第6章Delphi程序异常处理与调试技术概要.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开