第10章-程序调试和错误处理课件.ppt

上传人(卖家):晟晟文业 文档编号:4387309 上传时间:2022-12-04 格式:PPT 页数:28 大小:227.50KB
下载 相关 举报
第10章-程序调试和错误处理课件.ppt_第1页
第1页 / 共28页
第10章-程序调试和错误处理课件.ppt_第2页
第2页 / 共28页
第10章-程序调试和错误处理课件.ppt_第3页
第3页 / 共28页
第10章-程序调试和错误处理课件.ppt_第4页
第4页 / 共28页
第10章-程序调试和错误处理课件.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、2022-12-4清华大学出版社110.1 VB程序的错误类型程序的错误类型10.2 VB程序的工作模式程序的工作模式 10.3 程序调试程序调试10.4 错误捕获及处理错误捕获及处理2022-12-4清华大学出版社2【目的要求】1.理解程序的错误类型;2.掌握VB提供的常用调试工具的使用3.3.掌握错误的捕获与处理方法;【重点】错误的捕获与处理方法;2022-12-4清华大学出版社3VB应用程序的错误一般可分为3类,即编译错误(语法错误)、运行错误和逻辑错误。1.编译错误:指程序在编译时出现的错误(语法错误)。2.运行错误:运行错误是指程序本身没有编译(语法)错误,这种错误在编译时很难发现,

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=s End Function2022-12-4清华大学出版社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。2022-12-4清华大学出版社510.2 VB程序的工作模式程序的工作模式VB程序有三种工作

4、模式:设计模程序有三种工作模式:设计模式(式(Design Time)、运行模式)、运行模式(Run Time)和中断模式)和中断模式(Break Model)。)。1.设计模式设计模式2.运行模式运行模式3.中断模式中断模式在中断模式下,暂停应用程序的在中断模式下,暂停应用程序的执行,此时可以检查程序代码,执行,此时可以检查程序代码,并可以进行修改,也可以检查数并可以进行修改,也可以检查数据是否正确,修改完程序后,可据是否正确,修改完程序后,可继续执行程序。继续执行程序。VB所有调试手段所有调试手段均可以在中断模式下应用。均可以在中断模式下应用。可以用以下四种方式进入中断模可以用以下四种方式

5、进入中断模式:式:l l 在在“运行运行”模式下,执行模式下,执行“运行运行”菜单中的菜单中的“中断中断”命令;命令;l l 在程序中设置断点,程序在程序中设置断点,程序运行到断点处时自动进入中断模运行到断点处时自动进入中断模式;式;l l 在程序中加入在程序中加入“STOP”语语句,程序运行到该语句处时自动句,程序运行到该语句处时自动进入中断模式;进入中断模式;l l 在程序运行过程中,如果在程序运行过程中,如果出现错误,则自动进入中断模式;出现错误,则自动进入中断模式;从语法和算法设计思路来看,都没有错误,但始终得不到正确的结果。这类错误是所有错误中最难诊断、最难解决的错误,只有通过调试工

6、具的帮助,对程序进行逻辑分析、代码调试及分析、比较运行结果等综合手段才能最终加以解决。10.3 程序调试10.3.1 Visual Basic程序调试工具 为了使用调试工具,应首先进入中断模式,此时程序中的变量和控件的属性值都被保留下来,为用户分析应用程序的当前状态,解决程序的各种错误提供了有力的保障。图10-6所显示的【调试】工具栏为用户提供了许多功能强大的调试工具。2022-12-4清华大学出版社6图图10-6 运用这些调试工具可以对产生逻辑错误的程序进行调试,对程序的调试大致分为三个步骤:第一步是设置断点;第二步是跟踪程序运行;第三步是使用调试窗口。2022-12-4清华大学出版社7例:

7、验证【例例:验证【例10.1】的运行结果错在何处?】的运行结果错在何处?(1)在程序代码区人工设定一个断点。(2)运行程序,当执行到了设置断点的代码行时,程序终止进入中断状态,将鼠标移动到某个变量上面,可以看到设置断点代码行中变量的值。2022-12-4清华大学出版社8l 逐语句执行逐语句执行在调试工具栏上有一个单步执行程序的按钮。单击该按钮可以单步执行程序。也可以用热键F8来实现单步执行程序,或者在【调试】菜单上选取【逐语句】选项。l 逐过程执行逐过程执行“逐过程执行”是把被调用的过程视为一个基本单位来执行,然后转回到当前过程的下一语句。操作方法:单击“调试”工具栏上的“逐过程”按钮。也可以

8、用组合键Shift+F8或“调试”菜单上的“逐过程”选项。l跳出跳出当使用逐语句方式进入到一个过程中,如果确认该过程的语句绝对没有问题,可以单击【调试】工具栏的【跳出】按钮或按下快捷键Ctrl+Shift+F8,从当前过程中跳出,去执行过程调用者的下一条语句。2022-12-4清华大学出版社9在上面的方法中我们只通过设置断点和跟踪程序运行这两步,就已经检查出程序的错误了。对于较复杂的程序的调试,需要使用VB提供的调试窗口来完成。调试窗口主要包括立即窗口、本地窗口、监视窗口等。l运行到光标处运行到光标处 在对程序进行跟踪时,想略过不感兴趣的部分代码(如次数很多循环语句),这时可以把光标设置在需要

9、停止运行的代码上,然后按下快捷键Ctrl+F8或选择【调试】菜单的【运行到光标处】选项。例:使用调试窗口来完成调试【例题例:使用调试窗口来完成调试【例题10.1】的运行结果错在何处?】的运行结果错在何处?2022-12-4清华大学出版社10只显示当前过程中变量的值(即使是全局变量,也不会显示)。打开本地窗口的步骤:1)设置断点后,启动程序;2)程序被中断后,单击【视图】菜单中的【本地窗口】选项或单击【调试】工具栏的【本地窗口】按钮。l监视窗口监视窗口 使用【监视】窗口有两种用法:一是可用来显示某些表达式或变量的值,以确定这写表达式或变量的结果是否正确;二是可以设置当某个表达式返回True时,强

10、迫程序中断。2022-12-4清华大学出版社11l用法一:例:通过【监视】窗口对【例10.1】进行调试,检测变量s和i的值的变化情况。l用法二:这种用法是在当表达式的值满足某个条件时,可以使应用程序自动进入到中断模式的一种调试手段。这种方法不需要在代码区设置断点。例:在【例10.1】中,为了检测当变量s的值大于3时,循环变量i的值;可以通过对【监视窗口】的相关设置来完成。思考:思考:判断12100的累加结果在i?时累加值超过4000,使用【监视窗口】如何完成?2022-12-4清华大学出版社12使用立即窗口可以检查某个属性或变量的值,还可以对表达式求值、为变量或属性赋值。立即窗口的使用有下面三

11、种:(1)在设计模式下,直接在立即窗口中对变量赋值,或使用Print方法输出变量的值。(2)在应用程序中,使用Debug.Print 语句把信息输入到立即窗口。例如,将【例10.1】的程序代码中的输出语句改为“Debug.Print s”,运行结果会在立即窗口中输出。(3)在中断模式下,可以在立即窗口中使用Print方法输出当前变量或控件的值,也可以对当前变量或控件的属性赋值。注意:在立即窗口中,不接受数据声明,如:Dim x as Integer。2022-12-4清华大学出版社13 VB提供的各种调试工具,不仅可以帮助用户检查程序的逻辑错误,而且还可以帮助用户理解程序的执行过程,如过程(函

12、数)的参数传递方式。【例10.2】设计一窗体,如左图所示。在窗体上放置文本框Text1、Text2,分别用于输入一个整数闭区间的上下限,当单击【计算】按钮时,Text3中显示该闭区间上所有整型数据的累加和。其中累加的计算使用过程sum来完成。2022-12-4清华大学出版社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.

13、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 Sub2022-12-4清华大学出版社152022-12-

14、4清华大学出版社16(3)按F8键以逐语句方式运行程序,此时,程序转入到sum过程执行,注意各监测表达式的值的变化情况,如下图所示。(4)当以逐语句方式运行程序到sum过程的“End Sub”语句处时,我们发现变量c的值变为15,而与之对应的实参数z变量的值并没有变化。2022-12-4清华大学出版社17(5)按F8键继续以逐语句方式运行程序,此时过程sum执行结束,返回到主程序Command1_Click(),过程sum中的变量重新显示为“”。说明这些变量此时没有意义(这也说明:过程内部的变量的作用域只限于当前过程)。同时我们注意到,作为与形参数c对应的实参数z的数值仍然为0。所以,我们试图

15、通过将形参数c的运算结果传递给z,并没有成功。通过调试,我们得出结论:要使用形参数返回过程的运算结果,不能使用按数值传递方式(ByVal),要使用按地址传递方式(ByRef)。对于本例,我们可以将sum过程的首部改为:Sub sum(ByVal a As Integer,ByVal b As Integer,ByRef c As Integer)。按上面的方法重新运行,观察监视窗口的变化2022-12-4清华大学出版社1810.4.1 错误处理步骤错误处理步骤在VB中要增加应用程序的处理错误的能力,需要做以下两步工作:(1)设置错误陷阱(2)编写错误处理程序VB提供了0n Error GoTo

16、语句设置错误陷阱,捕捉错误。10.4.2 ERR对象对象在on Error语句捕捉到错误后,Err对象的Number属性返回错误的代号,通过错误代号即可知道引发错误的原因。2022-12-4清华大学出版社19Err对象的属性有:Number:错误号Description:错误描述HelpFile:该错误相应的帮助文件HelpContex:该错误帮助说明的主题号Source:错误来源VB提供的Error函数用于返回错误信息,其语法如下:Error(错误号)例如在VB的立即窗口中键入如下代码:Print Error(6)将显示“溢出”的错误信息。要查找运行时的错误号,可以创建自己的错误,之后用代码

17、显示Err.Number的值。2022-12-4清华大学出版社20错误处理程序指定的必须在同一过程中,On Error语句的语法格式有两种形式:1.用法一用法一On Error GoTo 标号 可能出错的语句 Exit Function(Sub)标号:错误处理该用法是在对错误不需要特别处理,只是显示一下提示信息以告诉用户出错的原因时使用。2022-12-4清华大学出版社21Private Sub Command1_Click()Dim a As Single,b As Single,c As Single a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除

18、数,除法)On Error GoTo Error c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出 Error:在发生错误时,程序跳转到此标号处,开始执行 MsgBox Err.Description End Sub2022-12-4清华大学出版社22On Error GoTo 标号 可能出错的语句 Exit Function(Sub)标号:错误处理 Resume 语句标号|行号|NextResume语句有3种形式:(1)Resume:返回到出错语句处重新执行。(2)Resume 语句标号|行号:返回到标号指定的行继续执行。若标号为0,则表示终止程序的执行。(

19、3)Resume Next:跳过出错语句,忽略错误,转到出错语句的下一条语句继续执行。2022-12-4清华大学出版社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驱动器中插入软盘,准备好后按重试,vbR

20、etryCancel,磁盘未准备好)If result=4 Then Resume 如果选择重试按钮,则重新打开文件,否则结束程序运行 End IfEnd Sub2022-12-4清华大学出版社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(请输入被除数,除法)Err

21、oroccured:b=Val(InputBox(请输入除数,除法)c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出Error:MsgBox 除数为零,请重新输入除数!Resume Erroroccured 跳转到Erroroccured标号(错误)语句处继续执行End Sub2022-12-4清华大学出版社25【例【例10.6】使用】使用Resume Next语句对例语句对例10.3中除数为中除数为0的情况进行处理的情况进行处理。Private Sub Command1_Click()Dim a As Single,b As Single,c As Sing

22、le On Error GoTo error a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除数,除法)c=a/b Print c Exit Sub 在没有发生错误时,通过该语句正常退出error:MsgBox 除数为零,输入错误!Resume Next 跳转到错误语句之后继续执行;即忽略错误,继续执行下一语句End Sub2022-12-4清华大学出版社26例10.6代码更改如下:Private Sub Command1_Click()Dim a As Single,b As Single Dim c As Single On Error Resume

23、 Next 忽略所有错误,一直到程序执行结束 a=Val(InputBox(请输入被除数,除法)b=Val(InputBox(请输入除数,除法)c=a/b Print c End Sub2022-12-4清华大学出版社27Resume 与Resume Next语句的差别:lResume是从产生错误的语句恢复应用程序的运行;lResume Next是从紧随产生错误的语句的下个语句恢复应用程序的运行。一般来说,对于错误处理程序可以更正的错误使用Resume,对于错误处理程序不能更正的错误使用Resume Next。10.4.4 退出错误处理语句要关闭错误的捕捉,可以使用语句:On Error GoTo 0 该语句的功能是停止错误捕捉,由Visual Basic直接处理运行错误。2022-12-4清华大学出版社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课件(模板)
版权提示 | 免责声明

1,本文(第10章-程序调试和错误处理课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|