第10章 程序调试与错误处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.3 错误处理 例如:下面程序在立即窗口中显示VB系统中所有的错误 码及错误信息。
Private Sub Form_Click() For k = 1 To 32767 If Error$(k) <> "应用程序定义或对象定义错误" Then Debug.Print k , Error$(k) End If Next k End Sub
10.1 VB程序错误的类型
10.1 VB程序错误的类型 VB程序出现的错误可分为三大类:编译错误、运行错误 和逻辑错误。 1)编译错误 编译错误是由于编程人员未能正确构造程序代码而产生的 错误。编译错误主要包括语法错误和结构错误。
语法错误指:以不合法的方式将合法的符号组合在一起 而产生的错误。比如,键入的关键字不正确、遗漏了某 些必需的标点符号、括号、对象属性引用没有对象等。 结构错误指:语句结构不完整或结构交叉而引起的错误。 比如,For 语句没有Next与之对应;块If语句中包含ForNext语句,而Next在End If之后出现等情况。
10.1 VB程序错误的类型
例10.2 运行错误示例。程序用于打开一个文件。运行时, 在文本框中输入一个将要打开的文件名,若此文件不存在, 程序就会出现运行错误,如下图所示。要避免这个错误, 可在程序中加一个条件判断,若文件存在才打开。
10.2 程序调试
10.2 程序调试 VB集成开发环境提供了多种程序调试工具,主要包 括:设置断点、单步运行、监视窗口和立即窗口等,这里 主要介绍程序调试工具及调试方法和技巧。 程序调试工具栏如图所示:
10.2 程序调试
例10.3 程序结果输出到立即窗口示例。如下图所示,使用 Debug.Print将计算阶乘函数Fact(5)执行的中间结果输出 到立即窗口中。在立即窗口中,测试变量t、i在当前断点 处的值。
10.2 程序调试
(3)用赋值语句可修改变量或对象的属性值 若当前程序运行的中间结果不正确,可以在立即窗口中, 输入正确的中间值,以此调试后面的程序是否正确。 (4)过程或函数的测试 在主调程序调用过程或函数之前应保证过程或函数的正 确性,以提高程序的调试效率。在立即窗口中通过执行过 程或函数来实现对过程或函数正确性的测试。
启 动 继 续
中 结 断 束
切 换 断 点
逐 语 句
逐 过 程
跳 出
本 地 窗 口
立 即 窗 口
监 视 窗 口
快 速 监 视
调 用 堆 栈
/
10.2 程序调试
10.2.1 VB的中断模式 在VB中断模式下,可以查看、修改程序代码,也 能查看数据。进入程序中断模式有三种方式: (1)在运行状态下,执行“运行”菜单下的“中断” 命令,或按Ctrl+Break键,即可进入中断模式; (2)在程序代码中设置断点,当程序运行到断点处就 自动进入中断模式; (3)程序运行时,由于错误的产生而自动进入中断模 式。 在中断模式下,对程序代码修改完毕后,可选择 “运行”菜单下的“继续”、“结束”或“重新启动”命 令而退出中断模式。
10.3 错误处理 2)Err 对象 Err对象即错误对象,包含最近所发生的一次错误 的信息。Err 对象常用属性和方法如下: ① Number属性:返回出错代码,即错误ID号。 ② Description属性:错误描述字符串。 ③ Source 属性:返回产生错误的应用程序,主要用于 OLE编程。 例如:当通过OLE访问Microsoft Excel时产生了错误, Err.Source属性值为"Excel.Application" ④ Clear方法:清除错误。 ⑤ Raise方法:引发错误。使用Raise方法可以人为地产 生一个错误,主要用于测试错误处理程序或仿真错误。 语法:Err.Raise Number [,Source][,Description]
10.3 错误处理 (2) Error 语句 Error语句的功能是模拟Visual Basic错误的发生。 使用格式: Error 错误码 例10.7 用Rrror语句模拟错误发生。下面程序用输入小 于0的数来模拟被0除的错误。程序运行时,单击窗体,若 输入小于0的数,就会发生被0除的错误。 Private Sub Form_Click() X$=Inputbox$("Input A Data: ") B=Val(X$) If B<0 Then Error 11 End Sub
10.3 错误处理
10.3.2 错误处理 错误处理程序是针对应用程序中捕获的错误做出相 应响应的错误处理程序代码,一般放在Exit Sub 和End Sub 或Exit Function 和End Function 之间,即正常情况 下,不会被应用程序执行的地方。 1)错误处理程序的一般结构 <行号|标号> 错误处理程序代码 RESUME[ NEXT|行号|标号 ]
10.2 程序调试
3)监视窗口 监视窗口用于显示监视对象(变量、表达式、属性等) 在程序运行中,其值的变化情况。监视对象可利用调试菜 单中的“添加监视”命令或“快速监视”设置。 例10.5 监视窗口的使用。对例10.4中的程序,通过 “添加监视”菜单命令,加入监视项N,Fact和I,在程 序运行时,监视窗口中显示上例程序被监视的对象的有 关状况。如图所示。
10.1 VB程序错误的类型
编译错误在 Visual Basic编译应用程序或启动运行 时就会自动检测到。这需要设置系统的“自动语法检测” 功能。设置方法:“工具”菜单→“选项”→“编辑 器”→“自动语法检测”。程序员可根据编译错误提示去 改正错误。 例10.1 编译错误示例。如下图所示,程序中的循环结 构For-Next与选择结构if-End If交叉,运行时产生编译错 误。
2)本地窗口 本地窗口可以自动显示当前过程中所有变量及它们 的值。当程序从一个过程切换到另一过程,本地窗口的内 容会随之发生变化。
在主程序调用过程或函数之前应保证过程或函数 的正确性,以提高程序的调试效率。 例10.4 立即窗口用于改变变量的值和函数测试示例。 如下图所示。在刚进入函数Fact时,通过立即窗口改 变变量N的值为6,则Fact计算的结果720是6!,显示5! =720。进一步测试函数Fact,结果显示函数正确。
10.3 错误处理
3)错误处理使用的语句和函数 ① Err、Erl和Error$函数 Err函数:返回程序执行时的错误码。错误码为整数值。 Erl函数:返回发生错误的语句行号,或最接近发生错 误语句的前一语句行号,常用在错误处理子程序中。 Error$[(错误码)]函数:返回对应错误码的错误信息。 若无错误码,则返回最后执行错误语句的错误信息;若程 序中没有错误,则返回空串。错误码介于1-32767之间, 若错误码不是VB缺省的错误码,则返回“应用程序定义 或对象定义错误”
10.3 错误处理
② 要删除的文件通过文本框或Input函数等以键入方 式指定文件名,则可用相应命令或函数对文件的存在与否 进行检测,根据检测结果作出相应的处理。比如: Dim Myfso As New FileSystemObject Private Sub Command3_Click() '删除文件 If Myfso.FileExists(Text1) Then Myfso.DeleteFile (Text1) Text1 = "" MsgBox "删除文件成功!" Else MsgBox "文件不存在!" End If End Sub
10.3 错误处理
10.3 错误处理 10.3.1 错误陷井 1)错误陷阱的激活 错误陷阱用于捕获错误,它的使用有两种形式。 ① On Error Goto<行号|标号> 功能:打开错误捕获功能。该语句执行后,运行中出现 错误时,将控制权转移到本语句指向的错误处理程序去执 行。该语句通常作为过程或函数的第一条可执行语句。 ② On Error Resume Next 功能:打开错误捕获功能。当发生错误时,转到产生错 误的下一条语句处执行。
跳转到产生错误的语句处再执行
10.3 错误处理
2)错误的控制 在程序设计中,可以对可能出现的运行错误用错误 处理程序加以控制,以确保应用程序的正常运行或正常退 出。下面例子的处理方式就体现出对错误进行主动控制的 思想。 例如:应用程序要实现文件的删除功能。 为避免出现因删除文件不存在而引发的错误,处理 的方式可以有: ① 通过通用对话框控件的“打开”对话框或文件系统 控件,对删除文件进行定位,这样可确保要删除文件的存 在。
10.2 程序调试
例10.6 设置断点及查看属性值示例。如下图所示,程 序行设置了断点后的呈反视显示。并用鼠标查看的标签 的Caption属性的值。
10.2 程序调试
10.2.4 单步调试 单步调试分两种: 单步语句调试,即逐语句调试。若有过程调用,则进 入过程中再逐条语句执行。按F8键可实现。 单步过程,即逐过程调试。执行单步过程时,是一步 执行一个过程。 按组合键Shift+F8可实现。 10.2.5 跳跃调试 当发现程序某一部分有错,而又想程序跳过错误语句 继续调试后续程序,可使用跳跃调试。在中断模式下,将 光标移到想要执行的语句(跳过一些语句行),然后执行 “调试”→“设置下一条语句”命令,或按快捷键 Ctrl+F9,下一条语句指针指向该行,再执行“继续”命令, 程序就跳到此处运行,从而跳过前面的语句。
10.2 程序调试
10.2.2 调试窗口 在中断模式下,可用鼠标指向要观察的变量或对象属 性,以直接显示其值,另外通过立即窗口、本地窗口、监 视窗口和调用栈窗口等,可以监视程序运行过程中变量的 变化情况。 1)立即窗口 主要用于查看变量的值。 立即窗口使用的主要方式有: (1) Debug.Print [输出列表] 在程序代码中,使用DEBUG.PRINT方法,可以将输出 列表中的各项值输出到立即窗口中。 (2)立即窗口中使用Print或?语句 在立即窗口中使用Print或?语句,显示变量或对象的属 性值。
10.3 错误处理
例如:用文本框输入数值型数据,该数据要参与算术运 算。在程序运行时,若输入为非数字串时,可能会引起程 序出错。解决的方法可以是: ① 用Val函数进行转换,可以确保不出现运行错误。 ② 用Isnumeric进行检测,作出相应的处理。 ③ 用代码限定只能输入数字。比如: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii >= vbKey9 Or KeyAscii <= vbKey0 Then KeyAscii = 0 ‘不是数字,清除字符 End If End Sub
第10章 程序调试与错误处理
教学目的和要求: 了解VB程序错误类型及其产生原因, 掌握程序调试的方法和技巧,掌握使用错误 陷阱技术捕获错误并进行错误处理的方法。
第10章 程序调试与错误处理
• • • • • •
10.1 VB程序错误的类型 10.2 程序调试 10.3 错误处理 本章小结 习题 九 实验十三 程序调3 中断调试 中断调试指在程序代码中设置断点。程序运行到断 点处,进入中断状态,可借助调试窗口检查变量的值。 VB提供了两种设置断点的方法: 1)设置断点 “调试”→“切换断点”命令;按快捷键F9;选取 调试工具栏中相应的图标;最常用的方法是用鼠标单击代 码窗口中程序行前面的断点标志栏。 2)STOP中断 在程序代码中加入STOP语句,程序运行到STOP 语句时会暂时终止程序执行,进入中断状态。 注意:程序调试完毕后,应将STOP语句删除或将其 变成注释语句,即ˊSTOP。
10.1 VB程序错误的类型
2)运行错误 应用程序在运行时,当一个语句执行一个不能执行 的操作,就会发生运行时错误。 例如语句:Speed = Miles / Hours 语句本身的语法无错误,但变量 Hours 的值若为零,除 法就是无效操作,这种错误,必须运行应用程序才能检测 到。 3)逻辑错误 逻辑错误导致应用程序不按预期方式执行 。从语法 角度来看,应用程序的代码是有效的,在运行时也没有无 效操作,但产生了不正确的结果。这是因为代码中存在逻 辑上的缺陷而引起的。系统不能检测出逻辑错误,只有通 过测试应用程序和分析产生的结果才能检验出来。