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