已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章VB程序调试与错误处理初步,可选内容(时间:2次课,4学时),第14章VB程序调试与错误处理初步,教学提示:本章主要介绍VB的程序调试技术,其中包括VB编程过程中常见的错误类型的产生和表现,以及利用VB提供的调试工具和语句对程序错误进行捕获、处理和修改的方法。VB为广大用户提供了功能强大的程序调试工具,使用户能够迅速排除编程中出现的问题。本章主要介绍:VB程序错误的种类、错误处理的方法以及程序代码调试的方法。,第14章VB程序调试与错误处理初步,14.1错误的种类14.2错误处理14.3代码调试14.4小结14.5思考与练习,14.1错误的种类,14.1.1语法错误14.1.2运行错误14.1.3逻辑错误,14.1.1语法错误,语法错误是存在于代码中的语言结构方面的错误。比如,拼写错误、缺少操作对象、不符合语法规则等错误都属于语法错误。例如,我们要输入下列代码:PrivateSubForm_Load()DimiAsIntegerDimjAsIntegerDimsumAsIntegersum=0Fori=1To100Forj=1100EndSub,14.1.1语法错误,由于我们不小心将语句:Forj=1To100书写成Forj=1100(漏掉了To),则当用户按下Enter键的时候,VisualBasic就会立刻测出这样的错误,会提示用户“缺少To”,如下图所示。,14.1.2运行错误,运行错误是指在运行程序的时候发生的错误。这些错误在编写的过程中,因为它们符合语法规则,所以不会被识别出来,也不会在编译的时候被发现。它们往往是由于进行了某种错误的操作造成的。例如,下面一段代码:PrivateSubCommand1_Click()DimnumberAsIntegerDimtotalAsDoubleDimaverAsDoubletotal=Val(Text1.Text)number=Val(Text2.Text)aver=total/numberText3.Text=averEndSub,14.1.2运行错误,该程序在计算平均值时,很有可能在没有提供参数number,或者提供了不合法的值,则会产生除数为0的错误,从而引起程序的崩溃。如下图所示:,这时,用户可以单击【结束】按钮来结束程序,也可以单击【调试】按钮来发现是哪一条语句发生了错误,以便于修改。,14.1.3逻辑错误,逻辑错误指的是程序可以执行,但就是得不到用户所希望的结果。这并不是程序语句的错误,而是由于程序设计时本身存在的逻辑缺陷而导致的。如定义了错误的变量类型,或程序中出现了不正确的循环次数或死循环等等。大多数逻辑错误不容易发觉是在哪一条语句发生的,而且错误产生的原因与产生错误结果的语句之间可能隔有很多语句。因此,对于逻辑错误一般要使用单步执行和监视的方法来查找错误的根源。,14.2错误处理,对于程序中可能出现的错误都要进行处理,否则会使应用程序崩溃。但是,有的错误是用户无法避免的。例如,当光驱中没有光盘时,用户访问了光驱,这时,系统会产生一个“设备没有准备好”的错误。在VisualBasic中,允许使用错误处理方法来对可能出现的错误进行预先处理。所谓错误处理,就是提供发生错误时执行的代码,也相当于是程序运行的一部分。当一个错误发生的时候,应用程序应该可以探测到这一个错误,并且进行相应的错误处理。用户应当在可能产生错误的地方放置错误探测语句,同时,在同一个程序中放置错误的处理代码。通常含有错误的探测捕捉和处理设置错误的捕捉陷阱,即在程序中可能出现错误的地方放置捕捉语句来捕获产生错误的语句。编写错误处理程序,即当程序中出现错误的时候,程序将运行用户指定的程序。退出错误处理程序,即在处理错误之后,应该恢复原来的一些参数,然后让程序继续正常地运行下去。,14.2错误处理,14.2.1错误捕获14.2.2激活错误捕获功能14.2.3编制错误处理程序,14.2.1错误捕获,当程序中的某行代码试图执行一项非法的操作时,将产生运行时错误(Run-TimeError)。例如,当我们的程序需要打开某个特定的文件时,如果这个文件被误删了,就会产生运行时错误“filenotfound”(文件未找到),如下图所示。,再如,当我们的程序要从软盘中读取文件时,如果软驱中没有软盘,就会产生运行时错误“Disknotready”(磁盘没有准备好)。,14.2.1错误捕获,通过这些例子可以看出,运行时错误是无法避免的。但是,一旦出现运行时错误,将造成程序崩溃。因此,我们必须对可能发生的错误进行处理。许多运行时的错误只能靠用户来解决,比如插入软盘。因此,我们必须在系统发出错误之前,截获错误,在错误处理程序中提示用户采取措施,是解决问题还是取消操作。如果用户解决了问题(如插入了软盘),我们的程序就能够继续执行,如果用户选择取消操作,我们就可以跳过这段程序,而继续执行后面的程序。这就是处理运行时错误的方法,我们将这个过程称为错误捕获(ErrorTrapping)。,14.2.2激活错误捕获功能,在我们捕获运行时错误之前,首先要激活错误捕获功能,这项任务是由OnError语句来完成的。OnError语句共有3种格式。OnErrorGoto行号此语句的功能是激活错误捕获,并将错误处理程序指定为从“行号”位置开始的程序段。例如:PrivateSubForm_Load()DimrAsVbMsgBoxResultOnErrorGoTonotreadyChDriveAExitSubnotready:r=MsgBox(请插入软盘!,vbRetryCancel+vbCritical,缺少软盘)Ifr=vbRetryThenResumeEndSub,14.2.2激活错误捕获功能,这是一个典型的错误处理过程。首先,我们可以预料到在此过程中有可能出现运行时错误,因此,在过程开始时,我们使用OnErrorGoTonotready激活错误捕获功能,并指定从行号“notready”开始的程序段为错误处理程序(注意,行号后面要加一个冒号,但在语句OnErrorGoTonotready中不加冒号)。这样,当程序运行到语句“ChDrive”A“”并发生错误时,将执行行号“notready”后面的语句。如果不发生错误,当执行到语句“ExitSub”时,将退出过程。在过程退出时,错误捕获功能就自动被取消了。2.OnErrorResumeNext此语句的功能是忽略错误,继续往下执行。使用这种格式的语句,它可以激活错误捕获功能,但并不指定错误处理程序,当错误发生时,不做任何处理,紧接着从发生错误语句之后的语句继续执行。,14.2.2激活错误捕获功能,例如,如下一段代码:PrivateSubForm_Load()OnErrorResumeNextChDriveAFileCopyreadme.txt,d:read.txtEndSub这段程序的功能是拷贝“A”盘中的“readme.txt”文件到“D”盘。假设当前驱动器是“C”盘,如果在执行语句“ChDrive”A“”时出错,就忽略此项操作,继续留在“C”盘。并将“C”盘当前目录下的“Readme.txt”文件拷贝到“D”盘,如果在“FileCopy”readme.txt“,”d:read.txt“”语句再出现错误,那么干脆什么都不做自动退出此过程。3.OnErrorGoto0此语句用来关闭错误捕获功能。当用户确定已经没有错误产生或者错误已经得到处理,就可以关闭错误捕获功能。要注意,错误捕获功能一旦被激活,将保持到过程结束,如果我们要在过程结束之前就关闭此功能,应使用“OnErrorGoto0”语句。,14.2.3编制错误处理程序,在捕获到运行时错误后,接下来就是要执行错误处理程序。在错误处理程序中,我们要针对错误的类型,向用户提供解决的方法,然后根据用户的选择,进行相应的处理。在VisualBasic中,每当产生错误的时候,都会将当前错误的编号和描述存储在Err对象中。因此,我们可以通过这个对象来判断当前产生的是什么错误。Err对象是一个具有全局范围的固有对象,用户不必在程序中重新定义它。Err对象最常用的属性是Number属性和Description属性。Number属性存储当前错误的编号,Description属性存储当前错误的描述。,14.2.3编制错误处理程序,VisualBasic中的常见错误码及其描述如下表所示。,14.2.3编制错误处理程序,Number属性的出现为错误的几种处理提供了很好的方法。根据用户不同的选择,返回的位置有所不同,如果用户解决了问题,并选择重试,就应该返回到产生错误的语句重新执行,如果用户选择取消操作,就应该跳过产生错误的语句,返回到它的下一行语句继续执行。从错误处理程序中返回时,我们使用Resume语句。根据不同的返回位置,Resume语句可分为3种:Resume0:返回到产生错误的语句重新执行。“0”可以省略。ResumeNext:跳过产生错误的语句,返回到它的下一行语句继续执行。Resume行号:返回到行号指定的位置继续执行。,14.2.3编制错误处理程序,下面我们来看一个例子:PrivateSubForm_Load()DimrAsVbMsgBoxResultOnErrorGoToehChDriveAFileCopyreadme.txt,d:readme.txtExitSubeh:SelectCaseErr.NumberCase71r=MsgBox(请插入软盘!,vbRetryCancel+vbCritical,缺少软盘!)Ifr=vbRetryThenResumeElseResumeNextEndIfCase53r=MsgBox(找不到文件,请将文件恢复后重试.,vbRetryCancel+vbCritical,缺少文件!)Ifr=vbRetryThenResumeEndSelectEndSub,14.2.3编制错误处理程序,我们通常使用SelectCase语句来判断错误的类型。在这个例子中,“磁盘没有准备好”是71号错误,“找不到文件”是53号错误。对于不同的错误类型,程序将向用户提示不同的信息。在这个例子中,对于“磁盘没有准备好”的错误,程序将向用户提示插入软盘,当用户单击“重试”按钮时,程序使用Resume语句返回到产生错误的行“ChDriveA”。如果这时用户已经插入软盘,这行语句将不会再产生错误,因此程序将继续执行。如果用户单击“取消”按钮,程序将使用ResumeNext语句返回到产生错误的下一行“FileCopyreadme.txt,d:readme.txt”继续执行。,14.3代码调试,有时,程序中不存在语法错误或运行时错误,也没有执行非法操作的语句,但是程序运行的结果却是不正确的。我们称这种错误为逻辑错误。例如,使用了错误的公式或局部变量与全局变量混用了等。程序运行时对于逻辑错误并没有任何的提示,我们只能深入到程序的内部,一步步地执行程序,观察程序的执行过程,从而找出隐藏在程序中的逻辑或运行时错误。我们将这个过程称为调试。调试是一种查找错误的手段,而不是处理或改正错误的手段。,VisualBasic为用户提供了功能强大的调试工具,对于错误程序的更正有很大的帮助,而且可以跟踪程序的执行过程。调试工具包含【设置断点】、【单步执行】、【显示变量内容】等。下面,我们就来学习一下,如何利用VisualBasic为用户提供的调试工具来调试程序。首先,单击【视图】菜单中的【工具栏】命令,打开【调试】工具栏。如下图所示。,14.3代码调试,14.3代码调试,14.3.1中断程序的执行14.3.2跟踪操作,14.3.1中断程序的执行,中断程序的执行是指当程序运行到某一行语句时,就进入中断状态,不再继续执行。这样我们就可以在中断状态下调试程序。常用的方法是通过设置断点来实现,下面我们来看看有关断点的操作。1.设置断点将插入点放在要设置断点的行,然后使用下述操作之一便可为该行设置断点:选择【调试】菜单中的【切换断点】命令。单击调试工具栏中的按钮。按F9键。,14.3.1中断程序的执行,为某一行设置了断点后,该行代码将以红底白字显示,并在边界指示条中出现一个红色的圆圈,表示这一行代码已被设置了断点。如图14.5所示。,2.清除断点对已设置断点的行,再执行和上面相同的操作便可清除断点。3.清除所有断点选择【调试】菜单中的【清除所有断点】命令。或按【Ctrl+Shift+F9】键。,14.3.2跟踪操作,14.3.2跟踪操作,2.逐过程执行此项操作单步执行代码,如果碰到过程调用,则不进入该过程,也就是说,将过程调用看作一行语句来执行。逐过程执行代码有下面3种方法。选择【调试】菜单中的【逐过程】命令。单击调试工具栏中的按钮。按Shift+F8键。3.跳出过程此项操作将当前过程中执行点后面的语句全部执行,并将下一执行点定位在调用该过程的语句的下一行。跳出过程有下面3种方法。选择【调试】菜单中的【跳出】命令。单击调试工具栏中的按钮。按Ctrl+Shift+F8键。,14.3.2跟踪操作,提示:如果在执行点后面的语句中存在断点,那么跳出过程命令将使程序执行到下一断点。也就是说,断点的级别要高于跳出过程命令。VisualBasic的程序调试技术和错误处理技术是相当完善的,本章只是简单地介绍了程序调试和错误处理的初步知识,目的是为了让用户掌握调试程序的基本方法,并养成良好的编程习惯,为日后的学习和工作打下良好的基础。,14.4小结,14.4小结,(1)常见的错误有“语法错误”、“运行时错误”和“逻辑错误”。(2)语法错误是存在于代码中的语言结构方面的错误。运行错误是指在运行程序的时候发生的错误。而逻辑错误则不同,它指的是程序可以执行,但就是得不到用户所希望的结果,这是由于程序设计时本身存在的逻辑缺陷而导致的。(3)所谓错误处理,就是提供发生错误时执行的代码,通常包含有错误的探测捕捉和处理,即设置错误的捕捉陷阱、编写错误处理程序和退出错误处理程序。(4)所谓错误捕获就是我们必须在系统发出错误之前,截获错误,在错误处理程序中提示用户采取措施,是解决问题还是取消操作。激活错误捕获功能一般有3种格式:OnErrorGoto行号、OnErrorResumeNext、OnErrorGoto0,14.4小结,(5)在编制错误处理程序中,我们要针对错误的类型,向用户提供解决的方法,然后根据用户的选择,进行相应的处理。一般我们可以利用Err对象的Number属性和Description属性的值编制错误处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 战略人力资源管理文献综述
- 人力资源名词解释
- 华为技术有限公司人力资源信息化现状分析工商管理专业
- 企业战略、人力资源管理系统与企业绩效的关系研究共3
- 人力资源成本控制策略
- 公共管理选题集锦
- 国有企业QC小组活动过程中存在的问题及对策分析
- 员工绩效考核指标
- 基于企业文化背景下的员工心理契约研究
- 浅析他励直流电动机的调速方法与特点
- 模拟日语教师招聘面试的流程与准备要点
- 鸡的养殖方法和技术课件
- 2025年牙髓切断术课件
- 建筑施工废水处理项目实施方案
- 2025江苏南京玄武区招聘社区工作者和“两新”组织专职党务工作人员70人考试参考试题及答案解析
- 统编版(2024)三年级上册道德与法治第三单元 在集体中长大 教案(7-9课)
- 机器人编程培训创新创业项目商业计划书
- 电力企业安全生产责任考核表
- 2025四川成都新都投资集团有限公司招聘23人笔试历年参考题库附带答案详解
- 小老鼠的探险日记课件
- 2025年艾滋病检测培训试题附答案
评论
0/150
提交评论