欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    程序调试和错误处理.ppt

    • 资源ID:6011270       资源大小:225.50KB        全文页数:28页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    程序调试和错误处理.ppt

    2023/9/14,清华大学出版社,1,第10章 程序调试和错误处理,10.1 VB程序的错误类型10.2 VB程序的工作模式 10.3 程序调试10.4 错误捕获及处理,2023/9/14,清华大学出版社,2,【目的要求】1.理解程序的错误类型;2.掌握VB提供的常用调试工具的使用3.3.掌握错误的捕获与处理方法;【重点】错误的捕获与处理方法;,2023/9/14,清华大学出版社,3,10.1 VB程序的错误类型,VB应用程序的错误一般可分为3类,即编译错误(语法错误)、运行错误和逻辑错误。1.编译错误:指程序在编译时出现的错误(语法错误)。2.运行错误:运行错误是指程序本身没有编译(语法)错误,这种错误在编译时很难发现,只是在运行时才能暴露出来。例如下面求某个数阶乘的函数:,Private Sub Command1_Click()Print fact(14)End Sub,程序本身没有任何语法错误,但在程序运行过程中,语句Print fact(14)(计算14的阶乘)的返回的值超出整型数值的范围,产生数据溢出导致程序出错。,Private Function fact(ByVal n As Integer)As Integer Dim s As Integer,i As Integer s=1 For i=1 To n s=s*i Next i fact=sEnd Function,2023/9/14,清华大学出版社,4,3.逻辑错误,逻辑错误是指从语法上看程序代码是有效的,并且也可以运行,但得不到应有(正确)的结果。与上述两种错误不同,逻辑错误不报告错误信息。,【例10.1】编程计算0.1+0.2+0.3+0.9的值。Private Sub Command1_Click()Dim i As Single,s As Single For i=0.1 To 0.9 Step 0.1 s=s+i Next i Print sEnd Sub,正确的结果应该是4.5,但按照上面的代码,结果却是3.6。,2023/9/14,清华大学出版社,5,10.2 VB程序的工作模式VB程序有三种工作模式:设计模式(Design Time)、运行模式(Run Time)和中断模式(Break Model)。1.设计模式 2.运行模式 3.中断模式在中断模式下,暂停应用程序的执行,此时可以检查程序代码,并可以进行修改,也可以检查数据是否正确,修改完程序后,可继续执行程序。VB所有调试手段均可以在中断模式下应用。可以用以下四种方式进入中断模式:l 在“运行”模式下,执行“运行”菜单中的“中断”命令;l 在程序中设置断点,程序运行到断点处时自动进入中断模式;l 在程序中加入“STOP”语句,程序运行到该语句处时自动进入中断模式;l 在程序运行过程中,如果出现错误,则自动进入中断模式;,从语法和算法设计思路来看,都没有错误,但始终得不到正确的结果。这类错误是所有错误中最难诊断、最难解决的错误,只有通过调试工具的帮助,对程序进行逻辑分析、代码调试及分析、比较运行结果等综合手段才能最终加以解决。,10.3 程序调试10.3.1 Visual Basic程序调试工具 为了使用调试工具,应首先进入中断模式,此时程序中的变量和控件的属性值都被保留下来,为用户分析应用程序的当前状态,解决程序的各种错误提供了有力的保障。图10-6所显示的【调试】工具栏为用户提供了许多功能强大的调试工具。,2023/9/14,清华大学出版社,6,图10-6,运用这些调试工具可以对产生逻辑错误的程序进行调试,对程序的调试大致分为三个步骤:第一步是设置断点;第二步是跟踪程序运行;第三步是使用调试窗口。,2023/9/14,清华大学出版社,7,1.设置断点,例:验证【例10.1】的运行结果错在何处?,(1)在程序代码区人工设定一个断点。(2)运行程序,当执行到了设置断点的代码行时,程序终止进入中断状态,将鼠标移动到某个变量上面,可以看到设置断点代码行中变量的值。,2023/9/14,清华大学出版社,8,2.跟踪程序运行,逐语句执行在调试工具栏上有一个单步执行程序的按钮。单击该按钮可以单步执行程序。也可以用热键F8来实现单步执行程序,或者在【调试】菜单上选取【逐语句】选项。逐过程执行“逐过程执行”是把被调用的过程视为一个基本单位来执行,然后转回到当前过程的下一语句。操作方法:单击“调试”工具栏上的“逐过程”按钮。也可以用组合键Shift+F8或“调试”菜单上的“逐过程”选项。跳出当使用逐语句方式进入到一个过程中,如果确认该过程的语句绝对没有问题,可以单击【调试】工具栏的【跳出】按钮或按下快捷键Ctrl+Shift+F8,从当前过程中跳出,去执行过程调用者的下一条语句。,2023/9/14,清华大学出版社,9,3.调试窗口,在上面的方法中我们只通过设置断点和跟踪程序运行这两步,就已经检查出程序的错误了。对于较复杂的程序的调试,需要使用VB提供的调试窗口来完成。调试窗口主要包括立即窗口、本地窗口、监视窗口等。,运行到光标处 在对程序进行跟踪时,想略过不感兴趣的部分代码(如次数很多循环语句),这时可以把光标设置在需要停止运行的代码上,然后按下快捷键Ctrl+F8或选择【调试】菜单的【运行到光标处】选项。,例:使用调试窗口来完成调试【例题10.1】的运行结果错在何处?,2023/9/14,清华大学出版社,10,本地窗口,只显示当前过程中变量的值(即使是全局变量,也不会显示)。打开本地窗口的步骤:1)设置断点后,启动程序;2)程序被中断后,单击【视图】菜单中的【本地窗口】选项或单击【调试】工具栏的【本地窗口】按钮。,监视窗口 使用【监视】窗口有两种用法:一是可用来显示某些表达式或变量的值,以确定这写表达式或变量的结果是否正确;二是可以设置当某个表达式返回True时,强迫程序中断。,2023/9/14,清华大学出版社,11,用法一:例:通过【监视】窗口对【例10.1】进行调试,检测变量s和i的值的变化情况。用法二:这种用法是在当表达式的值满足某个条件时,可以使应用程序自动进入到中断模式的一种调试手段。这种方法不需要在代码区设置断点。例:在【例10.1】中,为了检测当变量s的值大于3时,循环变量i的值;可以通过对【监视窗口】的相关设置来完成。,思考:判断12100的累加结果在i?时累加值超过4000,使用【监视窗口】如何完成?,2023/9/14,清华大学出版社,12,立即窗口,使用立即窗口可以检查某个属性或变量的值,还可以对表达式求值、为变量或属性赋值。立即窗口的使用有下面三种:(1)在设计模式下,直接在立即窗口中对变量赋值,或使用Print方法输出变量的值。(2)在应用程序中,使用Debug.Print 语句把信息输入到立即窗口。例如,将【例10.1】的程序代码中的输出语句改为“Debug.Print s”,运行结果会在立即窗口中输出。(3)在中断模式下,可以在立即窗口中使用Print方法输出当前变量或控件的值,也可以对当前变量或控件的属性赋值。注意:在立即窗口中,不接受数据声明,如:Dim x as Integer。,2023/9/14,清华大学出版社,13,10.3.2 调试示例,VB提供的各种调试工具,不仅可以帮助用户检查程序的逻辑错误,而且还可以帮助用户理解程序的执行过程,如过程(函数)的参数传递方式。,【例10.2】设计一窗体,如左图所示。在窗体上放置文本框Text1、Text2,分别用于输入一个整数闭区间的上下限,当单击【计算】按钮时,Text3中显示该闭区间上所有整型数据的累加和。其中累加的计算使用过程sum来完成。,2023/9/14,清华大学出版社,14,双击【计算】按钮,编写程序代码:Private Sub Command1_Click()Dim x As Integer,y As Integer,z As Integer x=Val(Text1.Text)y=Val(Text2.Text)Call sum(x,y,z)调用过程sum,通过实参数z返回结果 Text3.Text=Str(z)End Sub,运行程序,分别在文本框Text1和Text2内输入1和5;单击【计算】,我们注意到在Text3内显示的结果为0。程序错在何处?下面使用调试工具调试该程序,找出错误所在。,定义sum过程:形参数a,b表示闭区间的上下限,参数c用于向主程序传递运算的最终结果。三个参数的传递方式都是按数值传递。Sub sum(ByVal a,ByVal b,ByVal c As Integer)Dim i As Integer Dim s As Integer For i=a To b s=s+i Next c=sEnd Sub,2023/9/14,清华大学出版社,15,2023/9/14,清华大学出版社,16,(3)按F8键以逐语句方式运行程序,此时,程序转入到sum过程执行,注意各监测表达式的值的变化情况,如下图所示。,(4)当以逐语句方式运行程序到sum过程的“End Sub”语句处时,我们发现变量c的值变为15,而与之对应的实参数z变量的值并没有变化。,2023/9/14,清华大学出版社,17,(5)按F8键继续以逐语句方式运行程序,此时过程sum执行结束,返回到主程序Command1_Click(),过程sum中的变量重新显示为“”。说明这些变量此时没有意义(这也说明:过程内部的变量的作用域只限于当前过程)。同时我们注意到,作为与形参数c对应的实参数z的数值仍然为0。所以,我们试图通过将形参数c的运算结果传递给z,并没有成功。,通过调试,我们得出结论:要使用形参数返回过程的运算结果,不能使用按数值传递方式(ByVal),要使用按地址传递方式(ByRef)。对于本例,我们可以将sum过程的首部改为:Sub sum(ByVal a As Integer,ByVal b As Integer,ByRef c As Integer)。按上面的方法重新运行,观察监视窗口的变化,2023/9/14,清华大学出版社,18,10.4 错误捕获及处理,10.4.1 错误处理步骤,在VB中要增加应用程序的处理错误的能力,需要做以下两步工作:(1)设置错误陷阱(2)编写错误处理程序VB提供了0n Error GoTo语句设置错误陷阱,捕捉错误。,10.4.2 ERR对象,在on Error语句捕捉到错误后,Err对象的Number属性返回错误的代号,通过错误代号即可知道引发错误的原因。,2023/9/14,清华大学出版社,19,Err对象的属性有:Number:错误号Description:错误描述HelpFile:该错误相应的帮助文件HelpContex:该错误帮助说明的主题号Source:错误来源VB提供的Error函数用于返回错误信息,其语法如下:Error(错误号),例如在VB的立即窗口中键入如下代码:Print Error(6)将显示“溢出”的错误信息。要查找运行时的错误号,可以创建自己的错误,之后用代码显示Err.Number的值。,2023/9/14,清华大学出版社,20,10.4.3 捕获错误语句,错误处理程序指定的必须在同一过程中,On Error语句的语法格式有两种形式:1.用法一On Error GoTo 标号 可能出错的语句 Exit Function(Sub)标号:错误处理,该用法是在对错误不需要特别处理,只是显示一下提示信息以告诉用户出错的原因时使用。,2023/9/14,清华大学出版社,21,【例10.3】编写程序,当除数为0时显示提示信息。,Private Sub Command1_Click()Dim a As Single,b As Single,c As Single a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除数,除法)On Error GoTo Error c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出 Error:在发生错误时,程序跳转到此标号处,开始执行 MsgBox Err.Description End Sub,2023/9/14,清华大学出版社,22,2.用法二,On Error GoTo 标号 可能出错的语句 Exit Function(Sub)标号:错误处理 Resume 语句标号|行号|Next,Resume语句有3种形式:(1)Resume:返回到出错语句处重新执行。(2)Resume 语句标号|行号:返回到标号指定的行继续执行。若标号为0,则表示终止程序的执行。(3)Resume Next:跳过出错语句,忽略错误,转到出错语句的下一条语句继续执行。,2023/9/14,清华大学出版社,23,语句应用:,例10.4】编写错误处理程序,用于处理软驱中无软盘时的错误。Private Sub Command1_Click()Dim result As Integer On Error GoTo error Open“A:text.txt For Output As#1 Close#1 Exit Suberror:If Err.Number=71 Then result=MsgBox(请在A驱动器中插入软盘,准备好后按重试,vbRetryCancel,磁盘未准备好)If result=4 Then Resume 如果选择重试按钮,则重新打开文件,否则结束程序运行 End IfEnd Sub,2023/9/14,清华大学出版社,24,语句应用:,【例10.5】对例10.3进行改造,编写错误处理程序,处理当除数为0时,提示用户重新输入除数。Private Sub Command1_Click()Dim a As Single,b As Single,c As Single On Error GoTo Error a=Val(InputBox(请输入被除数,除法)Erroroccured:b=Val(InputBox(请输入除数,除法)c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出Error:MsgBox 除数为零,请重新输入除数!Resume Erroroccured 跳转到Erroroccured标号(错误)语句处继续执行End Sub,2023/9/14,清华大学出版社,25,语句:,【例10.6】使用Resume Next语句对例10.3中除数为0的情况进行处理。Private Sub Command1_Click()Dim a As Single,b As Single,c As Single On Error GoTo error a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除数,除法)c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出error:MsgBox 除数为零,输入错误!Resume Next 跳转到错误语句之后继续执行;即忽略错误,继续执行下一语句End Sub,2023/9/14,清华大学出版社,26,如果不想在错误发生时进行任何错误处理(包括错误提示),可以在代码的开始部分使用On Error Resume Next 语句,该语句将忽略所有出现的错误,使程序一直执行到结束。,例10.6代码更改如下:Private Sub Command1_Click()Dim a As Single,b As Single Dim c As Single On Error Resume Next 忽略所有错误,一直到程序执行结束 a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除数,除法)c=a/b Print c End Sub,2023/9/14,清华大学出版社,27,3.Resume和Resume Next语句的区别,Resume 与Resume Next语句的差别:Resume是从产生错误的语句恢复应用程序的运行;Resume Next是从紧随产生错误的语句的下个语句恢复应用程序的运行。一般来说,对于错误处理程序可以更正的错误使用Resume,对于错误处理程序不能更正的错误使用Resume Next。,10.4.4 退出错误处理语句要关闭错误的捕捉,可以使用语句:On Error GoTo 0 该语句的功能是停止错误捕捉,由Visual Basic直接处理运行错误。,2023/9/14,清华大学出版社,28,例如:Private Sub Command1_Click()Dim a As Single,b As Single,c As Single On Error GoTo error a=Val(InputBox(请输入被除数,除法)On Error GoTo 0 停止错误的捕捉 b=Val(InputBox(请输入除数,除法)c=a/b Print c Exit Sub error:MsgBox 除数为零!Resume Next End Sub,

    注意事项

    本文(程序调试和错误处理.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开