




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章程序调试与错误处理,9.1程序调试9.2错误处理程序设计9.3错误处理实例,9.1程序调试,9.1.1应用程序错误与调试9.1.2段点设置与立即窗口,9.1.1应用程序错误与调试,1应用程序的错误为了更有效的使用调试手段,把可能遇到的错误分成3类,即编译错误、运行错误、逻辑错误2调试工具栏VisualBasic6.0不能诊断或更正错误,但能提供工具帮助用户分析程序是如何从过程的一部分流向另一部分,分析变量和属性是如何随着语句的执行而改变。有了调试工具,就能深入到应用程序内部去观察,从而确定到底发生了什么,以及会发生。,9.1.2段点设置与立即窗口,1VisualBasic的模式2中断与程序调试3监视与监视表达式4立即窗口,返回,1VisualBasic的模式,VisualBasic的运行有三种模式:设计模式、运行模式(Run)和中段模式(Break)。启动VisualBasic后进入设计模式,主窗口标题栏有“设计”二字。建立应用程序的所有步骤基本上都在设计模式下完成,1VisualBasic的模式,执行“启动”命令后进入执行模式,VisualBasic的主窗口标题栏上的“设计”变成了“运行”。在运行模式下,VisualBasic把全部控制权都交给应用程序,可以查看程序代码,但不能修改程序代码,还可以执行“结束”命令回到设计模式,1VisualBasic的模式,中断模式是程序执行过程的一个暂停状态,进入中断模式后主窗口标题栏上的“运行”变成了“break”.在中断模式下,可以检查、修改程序代码,也可以检查程序中变量的中间值,还可以继续执行,2中断与程序调试,VisualBasic提供段点和Stop语句,把应用程序置于中断模式下可以使用以下方法进入中断模式(1)在程序中使用Stop语句,程序运行到Stop语句进入中断模式(2)在设计或中断模式下设置程序的断点,2中断与程序调试,(3)程序运行时出现错误,自动进入中断模式(4)程序运行时,按下Ctrl+Break键进入中断模式(5)程序运行时,在菜单栏上选择“运行中断”选项进入中断模式(6)程序运行时,单击工具栏上的“中断”按钮进入中断模式,设置断点的方法:在程序代码窗口中,将光标移到希望中断的语句上,在菜单上选择“调试-切换段点”选项,光标所在语句设置为断点。被设为断点的语句为反向显示并在其前面显示一个原点。,利用断点只能粗略的判断错误发生的位置。利用程序跟踪可以直接看到程序的执行情况和执行顺序,找到发生错误的位置。对于逻辑错误,利用断点可以跟踪到程序运行的去向。VisualBasic的跟踪方式包括逐语句执行,逐过程执行和跳出执行。,逐语句执行是每次只执行一个语句,并根据输出结果判断执行的语句是否正确。逐语句执行开始后,程序进入执行模式,执行一条语句切换到中断模式,并把下一条语句作为待执行的语句。,逐过程执行与逐语句执行基本相同。逐过程执行不跟踪到过程中,即把被调用的过程当作一条语句一次执行完毕。“跳出”可以执行当前过程的饿其他部分,并在调用过程的下一行中断执行。若想暂时避开程序的某一部分,可以通过跳出执行来实现。,3监视与监视表达式,VisualBasic自动对监视表达式进行监视。应用程序进入中断模式后,这些监视表达式出现在“监视”窗口中,可在该处观察其值。,3监视与监视表达式,只要表达式的值改变或等于一个特定的值,就可把应用程序设置为中断模式直接观察。例如,循环计数器达到一个特定值时,可用一个监视表达式把应用程序设置为中断模式,而不是一次一条语句执行数十次乃至数百次循环。当过程中的一个标志值改变时,都可使应用程序进入中断。,3监视与监视表达式,在设计或中断模式下,可添加监视表达式。方法:在菜单栏上选择“调试添加监视”选项,弹出“添加监视”对话框,在该对话框中添加监视表达式,添加监视表达式的步骤,若有必要,设置要监视的变量的范围。如果在“上下文”中选定“过程”或“添加模块”选项,则从相应的列表框中选定一个过程、窗体或模块名若有必要,在“监视类型”组中选定选项按钮,以确定对监视表达式的响应方式单击“确定”按钮,完成设置,添加监视表达式的步骤,若有必要,设置要监视的变量的范围。如果在“上下文”中选定“过程”或“添加模块”选项,则从相应的列表框中选定一个过程、窗体或模块名若有必要,在“监视类型”组中选定选项按钮,以确定对监视表达式的响应方式单击“确定”按钮,完成设置,4立即窗口,程序进入中断模式后,将自动激活立即窗口;也可以直接在系统菜单栏上选择“试图立即窗口”选项,打开立即窗口。若中断时程序正在执行某个过程,该过程的代码窗口与立即窗口一起显示。在立即窗口中,可以直接执行VisualBasic语句,并且不影响代码窗口的程序代码。,9.2错误处理程序设计,9.2.1应用程序错误与调试9.2.2Resume语句9.2.3Err对象和Erl函数9.2.4错误处理程序,9.2.1应用程序错误与调试,1设置错误陷阱语句2取消该错误捕捉功能,1设置错误陷阱语句,VisualBasic用OnError语句捕捉程序运行时的错误,以便设置错误陷阱,并利用Err对象及相关的属性、方法确定程序运行时的错误起因,以选择响应的解决措施,实现在线错误处理。语句格式:OnError语句有3种基本格式。格式1:OnError格式2:OnError0格式3:OnErrorResumeNext,1设置错误陷阱语句,功能:设置或取消错误捕捉功能。说明:在程序中,用OnError语句语句设置的错误捕捉功能一直起作用,直到另一个OnError语句取消所设置的错误捕捉功能。在错误捕捉处理程序起作用期间,一旦发生错误,程序即转向指定的行标号并执行错误处理程序。,1设置错误陷阱语句,格式1设置从指定行号开始的错误处理程序。行号可以是任意的行标号或行号,并要求与OnError语句在同一过程内。格式2取消已设置的错误捕捉程序。在已设置错误捕捉处理程序的情况下,执行该语句将已激活的错误处理程序变成无效。格式3指明发生运行错误时程序跳过错误继续执行,即发生错误时,不对错误做任何处理,直接跳到产生错误语句的下一个语句继续执行。若希望在程序出错时进行错误处理,必须用格式1重新设置其他错误处理,或用格式,1设置错误陷阱语句,VisualBasic用OnError语句捕捉程序运行时的错误,以便设置错误陷阱,并利用Err对象及相关的属性、方法确定程序运行时的错误起因,以选择响应的解决措施,实现在线错误处理。语句格式:OnError语句有3种基本格式。格式1:OnError格式2:OnError0格式3:OnErrorResumeNext功能:设置或取消错误捕捉功能。,1设置错误陷阱语句,说明:在程序中,用OnError语句语句设置的错误捕捉功能一直起作用,直到另一个OnError语句取消所设置的错误捕捉功能。在错误捕捉处理程序起作用期间,一旦发生错误,程序即转向指定的行标号并执行错误处理程序。,1设置错误陷阱语句,格式1设置从指定行号开始的错误处理程序。行号可以是任意的行标号或行号,并要求与OnError语句在同一过程内。格式2取消已设置的错误捕捉程序。在已设置错误捕捉处理程序的情况下,执行该语句将已激活的错误处理程序变成无效。,1设置错误陷阱语句,格式3指明发生运行错误时程序跳过错误继续执行,即发生错误时,不对错误做任何处理,直接跳到产生错误语句的下一个语句继续执行。若希望在程序出错时进行错误处理,必须用格式1重新设置其他错误处理,或用格式,2取消该错误捕捉功能,PrivateSubForm_Load()OnErrorGotoErrLineIfn=100OnErrorResumeNextEndIfExitSubErrLineEndSub,9.2.2Resume语句,语句格式:该语句有3种格式。格式1:Resume格式2:ResumeNext格式3:Resume,9.2.2Resume语句,功能:该语句放在错误处理程序中,指定执行错误处理程序后继续执行的语句,以便在指定位置恢复程序的执行。说明:该语句与Return语句类似,但只能用于错误处理程序中,即必须与OnError语句配套使用。,9.2.3Err对象和Erl函数,Err对象含有关于运行出错时的错误信息,其属性由错误的生成者设置。该错误生成着可能是VisualBasic系统,也可能是某对象,或者是程序设计者。Err对象的默认属性是Numeber。该默认属性可以直接用对象名称Err表示,所以不必修改以前Err函数或Err语句书写的程序代码。,9.2.3Err对象和Erl函数,出现错误时,Err返回错误的代码,错误代码的取值范围为132676。,9.2.3Err对象和Erl函数,Err函数返回错误语句的行号。若发生错误的程序没有行号,则Err函数总是返回0。虽然VisualBasic中也可以使用行号,但行号只是某一行的标识,但与旧版本Basic语言兼容,与程序的执行顺序无关。,9.2.3Err对象和Erl函数,只有在发生错误时,Err对象和Erl函数才返回有意义的值,通常把它们放在错误处理程序中,用来确定所发生的是什么错误,以及采取什么操作纠正错误。,PrivateSubCommand_Click()DimMsg,NI,UsrErrOnErrorGoToErrHandNI=Chr(10)Msg=“请输入一个错误号查看相应错误信息”UsrErr=InputBox(Msg)ErrorUsrErrExitSubErrHand:Msg=“错误号”&Err&“的信息是:”&NI&Error(Err)&sgBoxMsgResumeNextEndSub,9.2.4错误处理程序,应用程序运行过程中,出现错误是不可避免的,硬件出现的问题或用户的误操作,都会造成运行出错,这些错误可能使程序意外的终止,一般无法使应用程序继续运行。有些错误也许不会中断程序运行,但可能使代码产生意想不到的结果。因此必须用OnError语句捕获错误并执行错误处理程序,以避免应用程序不必要的意外中断。在程序设计中,通过设置错误对象Err的各种属性,如错误号、描述等,使应用程序在错误发生时可以对错误状况作出响应或处理,设计错误处理程序包括3个步骤,1、设置错误捕获当应用程序执行到OnError语句时,激活错误捕获,用OnError语句指定错误处理程序开始的标号。当错误发生时,通知应用程序在分支点设置或激活错误捕获。当包含错误捕获的过程处于活动时,错误捕获始终是激活的,即直到该过程执行Exitsub、Exit函数、Exit属性、EndSub、End函数或End属性语句时,错误捕获才停止。尽管在任一时刻任一过程中只能激活一个错误捕获,但可建立几个选择的错误捕获并在不同的时刻激活不同的错误捕获程序,2、编写错误处理程序错误处理程序应对所有能预见的错误都不得作出响应或处理。错误处理程序逻辑的第一步,是添加行标号,行标号标志着错误处理程序的开始。行标号应该有一个具有描述性的名称,其后必须加冒号。基本的约定:把错误处理代码放在过程末端,该过程在紧靠行标号前方处使用ExitSub、Exit函数或Exit属性语句。这样,如果未出现错误,过程可避免行错误处理代码。,错误处理程序体包含实际处理错误的代码,通常以SelectCase或if.ThenElse语句的形式出现。程序中需要确定可能会发生什么错误,对每种错误提供响应的操作方法。例如,在“磁盘未准备好”错误的情况下,需要提示用户插盘。为了处理所有意想不到的错误,应使用else或caseelse语句提供选项,以对不能预测的错误作出响应。Err对象的Number属性包含数值型的错误代码,错误代码表最新的运行错误号。借助Err对象与selectcase或ifthenelse语句的组合,可以对出现的任何错误采取有针对性的处理和操作。,3、出错误处理程序在错误处理程序中,可以用ResumeNext语句使程序返回出错语句之后的语句。,9.3错误处理实例,首先建立程序,这个程序的目的是要求一个整数的阶乘。当输入一个正整数时,程序首先对输入参数进行有效性检查,如果参数有效则求出阶乘并返回结果,否则提示输入参数无效,并要求重新输入。,9.3错误处理实例,按下面步骤建立这个程序:运行VisualBasic6.0并建立标准工程。单击工具栏中的Lable控件,在Form1窗体上绘制一个标签,并将其Caption属性社为“请输入(020)之间整数”。单击工具栏中的Text控件,并在Form1窗体中绘制一个文本框,然后将其Text设置为空。,9.3错误处理实例,单击工具栏中的CommandButton控件,并放置在窗体中,将其Caption属性设为“计算阶乘”。最后再放置两个标签到窗体Form1中,属性采用缺省值。在这个程序中需要处理的事件过程只有Command1_Click。在该过程中,需要进行参数检查和进行阶乘计算。这里编写了两个函数来完成这两个功能。,9.3错误处理实例,函数CheckParameters用来检查用户输入的参数。返回值是检查过的合法参数。函数JIECHENG计算一个数的阶乘值。它返回计算结果,Functioncheckprameters()用户输入转化为数值参数x=Val(text1.text)检查用户输入是否有效如果输入错误,则提示用户重新输入输入正确,就把检查过的参数作为结果返回ifx20andx=0thenlabel3.caption=str$(jiecheng(retV)endifendsub,下面测试程序的运行。(1)按F5键运行程序,并在文本框中输入0,单击计算阶乘按扭,得到图所示的结果。这个结果是正确的,(2)测试计算-1的阶乘,正常情况下程序应显示输入错误等提示。在文本框中输入“-1”,单击计算阶乘按钮显然这个结果与预期的不符,是错误的。下面就来查找该错误。由于输入无效参数-1时程序并没有显示出错提示所以推测在检查参数的代码中出了问题,(3)打开代码窗口,在调用CHeckPARAMETERS处设置断点,以便程序在检查参数之前中断运行,这样可以查看程序状态和中间结果。加入断点的操作可按下面步骤进行。代码窗口中,把光标移动到要加断点的一行。打开调试菜单,单击切换断点菜单项或按F9键。这时所选的语句出现一红色亮条,标识所设断点处。图显示了加入断点后的情形。,如果要去除断点,可以打开调试菜单,单击切换断点菜单项或按F9键。也可打开调试菜单,单击清除所有断点菜单项以清除所有断点,(4)按F5键运行程序。在文本框中输入“-1”,单击计算阶乘按钮,这时程序在断点处中断,。下面单步执行,跟踪检查参数这部分代码的运行(5)打开调试菜单,单击语句菜单项或按F8键单步执行,程序转入CHECKPARAMETER函数中。在执行到IF语句处时,打开视图菜单击立即窗口菜单项,这时桌面上出现了立即窗口。在立即窗口中输入“?X”,观程序接收到的参数值。立即窗口中显示的X值为-1,说明程序接收到的参数是正确的,错误可能在后面,所以继续单步执行,(6)按F8键使用单步运行,程序流程转到ELSE语句处。现在发现问题就出在这里,因输入的-1不在0-20之间,程序应执行LABEL2。CAPTION=“输入错误!请重新输入!”语句,以显示输入错误提示,而现在没有执行这条语句,因此在IF判断语句中的条件设置可能有问题。仔细查看IF语句,发现果然有问题,这条语句写的是:ifx20andx20andx20ORx0”,再按F5键运行。现在程序已经显示出错信息,说明参数检查部分已正常工作,(7)关闭正在运行的程序,打开调试菜单,单击清除所有断点菜单项,然后按F5键运行程序。在输入文本框中输入5,再单击计算阶乘按钮。(8)观察计算结果,发现5的阶乘等于1,显然是不正确的。这说明阶乘计算也有错误。下面再观察求解阶乘的函数。(9)关闭正在运行的程序,然后打开调试菜单,单击添加监视菜单项,并按图所示进行设置。单击确定按钮,再按F5键运行程序。在输入框重新输入5,单击计算阶乘按钮,(10)程序在调用JIECHENG函数处中断。打开视图菜单,单击调用堆栈菜单项,打开调用堆栈窗口,如图所示,观察JIECHENG函数的递归调用是否存在问题。在调用堆栈窗口中显示了当前还末执行的函数和过程。这里显示了5个“工程1.FORM1.JIECHENG”工程,说明JIECHENG函数在计算5的阶乘时的递归调用是正确的。再看监视窗口,JIECHENG函数当前的返回值为1,也是正确的,(11)在调用堆栈窗口中单击关闭按钮,关闭调用堆栈窗口,然后按F5键继续运行。这时JIECHENG函数返回值改变,程序进入中断方式。再打开调用堆栈窗口。JIECHENG函数的返回值为0,而实际应为2,错误发生在这里。关闭调用堆栈窗口,结果程序运行。Functionjiecheng(byvalxasinteger)aslongIfx=oorx=1thenJiecheng=1ElseJieheng=x*jiecheng(x-1)E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年齐齐哈尔富裕县机关事务保障服务中心招聘公益性岗位人员考前自测高频考点模拟试题含答案详解(研优卷)
- 2025年国企综合笔试试题及答案
- 2023年度深圳职业技术大学单招《语文》模考模拟试题附参考答案详解(达标题)
- 2024电工高分题库(综合题)附答案详解
- 绿色发展引领:2025年农业政策支持与生态农业模式创新应用报告
- 水资源利用与保护测试题带答案
- 2025年南宁交通投资集团有限责任公司人员招聘笔试备考题库含答案详解
- 2024年高职单招真题附参考答案详解【能力提升】
- 职业教育实训教学设备配置标准
- 知识题库-宠物医院岗位知识竞赛试题及答案
- 2025年防雷检测专业技术人员能力认定考试题库及答案
- 《房屋市政工程生产安全重大事故隐患判定标准(2024版)》解读
- 美发裁剪理论知识培训课件
- 舞蹈老师自我介绍课件
- 2025年吉林省教育系统校级后备干部选拔考试题及答案
- 社区安全知识培训资料课件
- 徐学义基础地质调查课件
- 2025主题教育应知应会知识题库及答案
- 无人机航空安全知识培训课件
- 警用侦查无人机在侦查行动中的应用分析报告
- 2024年春季云南省高中学业水平合格性考试化学试卷真题(含答案)
评论
0/150
提交评论