2分快三

网站地图 | RSS订阅 百姓2分快三 - 上海百姓2分快三|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:2分快三 » 网站建设 » 正文

VB程序调试

2019-8-9 16:21:6 | 作者:老铁SEO | 0个评论 | 人浏览

  VB程序调试_计算机软件及应用_IT/计算机_专业资料。清华大学出版社 VB.NET程序设计实用教程 第12章 程序调试 本章主要内容 VB 的3种工作模式 在VB 中使用调试工具调试 程序的方法 VB 中的常用调试窗口 非结构化

  VB.NET 清华大学出版社 VB.NET程序设计实用教程 第12章 程序调试 本章主要内容 VB 的3种工作模式 在VB 中使用调试工具调试 程序的方法 VB 中的常用调试窗口 非结构化异常处理语句(On Error语 句和Resume语句)的功能与使用 结构化异常处理语句( Try…Catch…Finally…End Try 语句)的功能与使用 主 要 内 容 12.1 程序的调试 程序中的错误可分为语法错误、逻辑错误或运行错误三 种类型,系统会在语法错误的下面加上波浪线,比较容易 查找和排除,而逻辑错误或运行错误排除则比较困难。当 程序中出现了逻辑错误或运行错误而又难以解决时,就应 该借助于程序调试工具对程序进行调试。所谓程序调试就 是在应用程序中查找并修改错误的过程。通过程序的调试, 可以纠正程序中的错误。为了更正程序中发生的不同错误, VB .NET提供了多种调试工具,如设置断点、插入观察变 量、逐行执行和过程跟踪、各种调试窗口等。 1、程序错误概述 (1)程序错误类型 ①编译错误 ?笼统地说,编译错误是指程序在编译过程中出 现的错误。编译错误的产生原因是在程序代码 中出现了不正确的代码。 ?Visual Basic具有功能强大的智能编辑功能 ,程序中的语法错误在代码编辑阶段就会被自 动检测和识别。 ?②运行错误 运行错误是指程序顺利通过编译后(即已经没有编 译错误),在运行期间由于执行了程序中的某些非 法操作或力图执行一个操作失败时所发生的错误。 ?③逻辑错误 逻辑错是指程序在没有编译错误和运行错误的前提 下,顺利运行程序,但是却得不到预期的结果。 Visual Basic不会针对逻辑错误给出错误提示, 而且逻辑错误本身又具有隐蔽性,所以这种错误的 发现和排除难度较大。 (2)程序减少错误的方法 ?①在程序中加上Option Explicit语句,避免 由于变量名的误用而产生的错误。 ?②声明变量时,尽可能说明变量的具体类型, 少用Variant类型。 ?③加入适当的注释,提高程序的易读性。 ?④整个程序中使用统一的变量名、过程名和对 象名命名规则。 ?⑤为每一个事件过程和普通过程指定一个特定 的、明确的目标。 ?⑥对于预感会出现错误的地方,合理添加错误 捕捉与处理程序。 12.1.1 VB 的3种工作模式 1 2 1 设 计 模 式 运 行 模 式 3 1 中 断 模 式 12.1.1 VB 的3种工作模式 (1)设计模式 在设计模式下,用户可以设计项目。使用VB 新 建一个项后,系统将自动进入设计模式,此时,IDE 的标题栏将显示“[设计]”字样。处于设计模式时, 可进行应用程序的窗体设计、为窗体添加控件、设置 对象属性、编写程序代码等操作。在设计模式下可以 为程序设置断点。 12.1.1 VB 的3种工作模式 (2)运行模式 项目设计完之后,运行项目,系统就进入了运行模式。 此时,在IDE的标题栏上将显示“[运行]”字样。处 于运行模式时,程序设计人员可以与程序交互、可以 查阅程序代码,但不能修改程序代码。执行【调试】 →【停止调试】命令,或单击工具栏上的“停止调试” 按钮图标“ ”就可以中止程序运行。 12.1.1 VB 的3种工作模式 (3)中断模式 当系统处于运行模式时,单击工具栏中的“全部中断” 按钮“ ”,或执行【调试】→【全部中断】命令, 都将暂停程序的运行,进入中断模式。此时,在IDE 的标题栏中将显示“[中断]”字样。中断模式主要用 于程序调试和排除错误,可以查看代码,也可编辑代 码。同时,可以检查或修改数据。当想结束中断重新 从中断处继续执行程序时,只需单击“继续”按钮 “ ”即可。如果程序中设有断点或代码中含有 Stop语句,则程序运行到断点或Stop语句处也将进 入中断模式。 归纳起来,处于中断模式的应用程序可以完成如 下操作: ?①编辑修改程序代码。 ?②确定活动的过程(正在被调用执行的过程) 。 ?③查看变量、属性和表达式的当前值。 ?④修改变量和属性的值。 ?⑤执行程序中特定的语句。 从程序运行模式进入中断模式的方法有: ?①选择工具栏上的“中断”按钮。 ?②选择“运行”菜单中的“中断”菜单命令。 ?③按下Ctrl+Break键。 ?④当程序出现未被捕捉的错误时,单击错误提 示对话框中“调试”按钮。 ?⑤程序执行到设置断点处。 ?⑥程序执行到Stop语句。 12.1.2 使用调试工具调试程序 为了方便用户对程序进行调试 ,VB 提供了一组调试工具。可通 过“调试”菜单和 “调试”工具 栏来调用这些调试工具,“调试 ”菜单如图所示,“调试”工具 栏如图所示。当调试工具栏没有 出现时,可执行【视图】→【工 具栏】→【调试】使之出现。 12.1.2 使用调试工具调试程序 1.设置和删除断点 断点是应用程序暂时停止执行的位置,也是让应 用程序进入中断模式的地方。在程序设计中,可以在 中断模式和设计模式下设置和删除断点。在调试程序 时,按照程序的功能,可在怀疑有错误的语句处设置 断点,这样,有利于测试程序的功能和发现程序的逻 辑错误。 设置断点的方法主要有以下几种: ①在代码窗口中,单击要设置断点的那一行代码, 然后按F9键; ②在代码窗口中,在要设置断点的那一行代码行上, 单击鼠标右键并选择“插入断点”命令; ③在代码窗口中,在要设置断点的那一行代码行的 左边界上的竖条上单击。 12.1.2 使用调试工具调试程序 被设置成断点的代码行显示为红色,并在其左边显示 一个红点,如图所示。若要删除一个断点,只需重复 上面步骤即可。还可以选择“调试”菜单中的“清除 所有断点”菜单项来清除断点。 12.1.2 使用调试工具调试程序 2.跟踪程序的执行 在VB 中,提供了“逐语句”、“逐过程”、“跳出”等好几种 跟踪程序执行的方式。 ① 逐语句执行:“逐语句”执行方式是一次执行一条语句,这种 方式又称为单步执行。每执行一条语句之后,程序设计人员可 以使用“即时”窗口、“局部变量”窗口或“巡视”窗口,来 查看语句的执行结果,借此分析程序中存在的问题。 ② 逐过程执行:“逐过程”执行与逐语句执行类似,差别在于当 前语句如果包含过程调用,“逐语句”将进入被调用过程,而 “逐过程”则把整个被调用过程当作一条语句来执行。 ③ 跳出:“跳出”命令是连续执行当前过程的剩余语句部分,并 在调用该过程的下一个语句行处中断执行。 以上三种命令均可以通过执行【调试】菜单中的相应菜单命令 或单击【调试】工具栏上的相应按钮来实现。 12.1.3 常用的调试窗口 在调试应用程序时,经常要分析应用程序的程序段或语句 的运行结果,并希望能够看到变量、属性、表达式等值 的变化,以便找出错误所在处。为便于观察程序块或语 句的运行结果,在VB 提供了很多调试窗口,充分利用这 些窗口,可以提高程序调试的效率。下面将一一介绍主 要调用窗口的功能。 12.1.3 常用的调试窗口 1. “命令”窗口 在VB 中,有一个“命令”窗口,在该窗口中可以直接使用VB 的各种命令与系统交互。“命令”窗口有两种不同的模式:命 令模式和立即模式。命令模式主要用来执行命令,立即模式主 要用于调试程序。在调试应用程序执行函数或语句等操作时, 可使用立即模式查看,并更改变量的值。通过执行【调试】→ 【窗口】→【即时】命令,可以以立即模式打开“命令” 窗口。当命令窗口处于立即模式时,标题栏显示“命令窗口一 立即”,如图所示。 “命令”窗口 12.1.3 常用的调试窗口 2.“监视”窗口 利用“监视”窗口,可以动态观察 变量、数组、数组元素和表达式的 值,从而可以观察程序的运行情况, 找到错误的所在。在“监视”观察 的变量或表达式称为监视表达式。 “监视”窗口只能在运行模式或中 断模式下打开,打开方法是执行 【调试】→【窗口】→【监视】命 令,打开的“监视”窗口如图所示。 若要在“监视”窗口中添加监视表 达式,只需单击【监视】窗口“名 称”列最下面单元格上单击,在其 中输入监视表达式即可。“监视” 窗口是最重要的调试用窗口之一, 在逐语句运行的情况下,通过该窗 口可以看到每执行一条语句后,监 视表达式值的变化情况,从而可以 找到错误所在 图 “监视”窗口 12.1.3 常用的调试窗口 3. “局部变量”窗口 在“局部变量”窗口可以显示 当前过程中所有局部变量的值。 当程序从一个过程执行到另一个 过程时,“局部变量”中显示的 变量及其值也会随之改变,因为 该窗口只显示当前正在执行的过 程中所有局部变量的值。打开 “局部变量”窗口的方法是执行 【调试】→【窗口】→【局部变 量】命令,打开的“局部变量” 窗口如图所示。“局部变量”窗 口只显示当前过程的“局部变量” 的值,模块级变量和全局变量的 值不会显示在该窗口中。 除了上述窗口外,还有“任 务列表”窗口、 “输出”窗口、 “Me”窗口等调试窗口。 图 “局部变量”窗口 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 任 务 1 2 - 1 描 述 : 制作一个简单计算器程序,程序 的设计界面如图 12-1 所示。程 序运行时通过按钮输入运算公式, 如图 12-2 所示。单击“计算” 按钮将得到计算结果,如图 123 所示。单击清除按钮将清除文 本框中显示的表达式或运算结果。 程序能够捕获并处理算术运算溢 出的异常(被 0 除和运算数或运 算结果超出类型允许的范围)和 运算数少的错误,分别如图 124 和 图 1 2 - 5 所 示 。 图5-8 输入的公式 图5-7 程序设计界面 图5-9 单击“ 运算”得到的 结果 “运算数缺少异常”处理 “算术运算溢出”异常处理 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 任务分析: 通过单击数字按钮输入公式时,只需在各数字按钮的Click事件 中把按钮的Text属性值连接到文本框的Text属性中,这样每 单击一次数字按钮,对应的数字将出现在文本框中。单击运算 符按钮时,在文本框的Text属性中连接一个空格,然后连接运 算符按钮的Text属性,再连接一个按钮。这样在“计算”按钮 的Click事件中,就可以通过查找空格的位置,通过字符串的取 子串方法就可以获得两个运算数和运算符,然后通过Select Case…End Select语句可以判断运算符是什么运算符并对两 个运算数进行相应运算就可以得到结果,把结果显示出来即可。 为了捕获并处理异常,可使用On Error语句指定错误处理程序。 在错误处理程序块中通过Err对象的Number属性中的错误号 来判断错误的类型(算术运算溢出,错误号为6。过程参数错误, 错误号为5),然后决定相应的处理。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 任务实现: 1.启动VB.NET,新建一个项目,项目类型为 “Windows应用程序”,项目的存放位置为 “D:\VBTASK\CH05”,项目名为“Task5_1”。 2.把Form1窗体的Text属性值设置为“简单计算 器”,把它的Name属性值设置为 “SimpleCalculator”。单击“解决方案资源管理 器”中的“Form1.VB”窗体,然后在属性窗口中把 它文件名属性设置为“SimpleCalculator.vb”。 然后执行【项目】→【Task5_1属性】命令,在出 现的“Task5_1属性页”对话框中把“启动对象” 设置为“SimpleCalculator”。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 控件名 属性名 属性值 结果: 清空 1 2 3 4 5 6 7 8 9 0 + - * / 运算 说明 Label1 TextBox1 Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text 提示 显示算式或结果 单击它清空文本框中显示的内容 单击它在文本框中显示的数字后连一个“1” 单击它在文本框中显示的数字后连一个“2” 单击它在文本框中显示的数字后连一个“3” 单击它在文本框中显示的数字后连一个“4” 单击它在文本框中显示的数字后连一个“5” 单击它在文本框中显示的数字后连一个“6” 单击它在文本框中显示的数字后连一个“7” 单击它在文本框中显示的数字后连一个“8” 单击它在文本框中显示的数字后连一个“9” 单击它在文本框中显示的数字后连一个“0” 把空格、+号和空格连接到文本框的Text属性中 把空格、-号和空格连接到文本框的Text属性中 把空格、*号和空格连接到文本框的Text属性中 把空格、/号和空格连接到文本框的Text属性中 单击它计算出算式的结果并显示出来 3.对照程序设计界面, 为窗体添加控件并设 置控件的属性。控件 的属性设置如表121所示。 Button1 Button2 Button3 Button4 Button5 Button6 Button7 Button8 Button9 Button10 Button11 Button12 Button13 Button14 Button15 Button16 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 4.编写Button1的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = 清空文本框 End Sub 5.编写Button2的Click事件过程代码,如下。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim btn As Button 按钮类型的变量 btn = sender 把产生该事件的按钮对象赋值给 btn TextBox1.Text = TextBox1.Text + btn.Text 把 该按钮的Text属性值连接到TextBox1中 End Sub 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 6.运行程序,单击“1”按钮,发现每单击一次该按钮 文本框中都将连接一个“1”,单击“清空”按钮, 文本框中的内容将被清空。 7.依次编写Button3~Button11各按钮的Click事 件过程代码,并对各按钮的功能进行测试。各按钮的 Click事件过程代码和Button2按钮的Click事件过 程代码完成一样。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 8.编写Button12按钮的Click事件过程代码,如下。 Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click Dim btn As Button btn = sender 在文本框的Text属性后连接一个空格、本按钮的Text属性 值和一个空格 TextBox1.Text = TextBox1.Text + + btn.Text + End Sub 说明: 连接两个空格的作用是把运算符和前后的两个运算数分隔开来,这 样就可以通过字符串的Index方法找出空格的位置,然后再通 过字符的Substring方法分离出两个运算数和运算符。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 9.运行程序,通过单击数字按钮输入第一个运算数, 单击“+”按钮输入“+”运算符号,再通过单击数字 按钮输入第二个运算数,发现在两个运算数和“+” 号之间均有一个空格。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 10.依次编写Button13、Button14和Button15 的Click事件过程代码,并对它们的功能进行验证。 Button13、Button14和Button15的Click事 件过程代码与Button12的Click事件过程代码完全 一致。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 11.编写“运算”按钮的Click事件过程代码如下。 Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click 发生错误转移到标号“ErrorPro”指定的行去执行错误处理程序 On Error GoTo ErrorPro Dim r As Decimal 保存计算结果的变量 Dim t As String = TextBox1.Text 用于保存文本框中的算术表达式exOf( ) 搜索空格位置,如果没有空格,返回值 为0 字符串的取子符方法,第二个参数小于0,则将产生错误号为5的异常,即过程参数不正 确 Dim s1 As String = t.Substring(0, space) 通过取子串方法获得第一个运算数 Dim op As String = t.Substring(space + 1, 1) 通过取子串方法获得运算符 Dim s2 As String = t.Substring(space + 3) 通过取子串方法获得第二个运算 数 Dim arg1, arg2 As Integer arg1 = Val(s1) : arg2 = Val(s2) Select Case op Case + : r = arg1 + arg2 Case - : r = arg1 - arg2 Case * : r = arg1 * arg2 Case / : r = arg1 / arg2 Case Else 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 MsgBox(输入的运算符有误!) Exit Sub End Select TextBox1.Text = CStr(r) 显示结果 Exit Sub 退出过程 ErrorPro: 错误处理程序块 Select Case Err.Number Case 6 除数为零时,或运算溢出时的错误号 MsgBox(算术运算溢出!, , 溢出提示) TextBox1.Focus() Exit Sub Case 5 Substring过程的参数不符合要求的错误号 MsgBox(必须输入运算符和第二个运算数!, , 运算数少) Exit Sub Case Else 其它情况显示错误号和错误原因 MsgBox(错误号为 & Err.Number & Chr(10) & Chr(13) & 错误原因: & Err.Description) Exit Sub End Select End Sub 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 说明: (1)程序中的“t.IndexOf( )”的作用是在字符串变量t的值中查找空格第一次出现的位置, 若找到则以整数形式返回空格所在位置(第一个字符的位置为0),若找不到则返回-1。 IndexOf是字符串的一个方法,其作用是在字符串中查找子符的位置,查找到则返回位置 值,查找不到返回-1。 (2)程序中“t.Substring(0, space)”的作用是从变量t存放的字符串的第一个字符开始取 space个字符作为字串返回。Substring也是字符串的一个方法,其作用是取子串,基本格 式有两种,分别如下。 [格式1]:str.Substring(start,length) [作用]:从“str”指定的字符串的第“start”个字符开始,取“length”个字符作为子串返回。 参数start代表要取的子串的开始位置,length代表要取的子串的长度,值均应大于等于0。 [格式2]:str.Substring(start) [作用]:从“str”指定的字符串的第“start”个字符开始,一直取到字符串的结尾作为子串返回。 (3)程序中的语句“On Error GoTo ErrorPro”是一条非结构化的错误捕获语句,用来捕获程 序中的错误。在非结构化异常处理中,将On Error语句放在代码块的开始处,它将处理在 该块内发生的任何错误。如果在执行On Error语句后过程中引发了异常,程序流程将跳转 到On Error语句中指定的行参数。行参数(行号或行标签)指示异常处理程序的位置。 有时,在某过程中调用了另一个过程,并且在被调用过程中发生异常。这种情况下,如果被调 用过程不处理异常,则异常传播回调用过程,并且程序流程将跳转到On Error语句中指定 的行参数。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 On Error语句有以下四种形式: ? On Error GoTo Line ? On Error Resume Next ? On Error GoTo 0 ? On Erro GoTo -1 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ① On Error GoTo Line 该语句假定错误处理代码在Line参数指定的行处开始。该语句的作 用是如果发生运行时错误,则将流程跳转到该Line参数中指定 的行号和行标签,并激活错误处理程序。指定行必须与 On Error GoTo Line 语句位于同一过程中,否则 Visual Basic 将 生成编译器错误。请看下面的示例: Sub ErrTest On Error GoTo ErrorHandler 可能包含错误的代码 Exit Sub ErrorHandler: 用于处理错误的代码 Resume End Sub 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ① On Error GoTo Line 该语句假定错误处理代码在Line参数指定的行处开始。该语句的作用是如果发生运行时错误, 则将流程跳转到该Line参数中指定的行号和行标签,并激活错误处理程序。指定行必须与 On Error GoTo Line 语句位于同一过程中,否则 Visual Basic 将生成编译器错误。请看 下面的示例: Sub ErrTest On Error GoTo ErrorHandler 可能包含错误的代码 Exit Sub ErrorHandler: 用于处理错误的代码 Resume End Sub 本例包含一个名为 ErrorHandler 的错误处理程序。如果ErrTest过程中的任何代码生成错误, VB .NET将立即执行 ErrorHandler 标签后面的代码。在错误处理程序块的结尾处, Resume 语句将把程序流程转移到最先发生错误的代码行,重新执行发生错误的代码行及 以后的代码。 需注意的是,必须将 Exit Sub 语句放在错误处理块的前面,否则,VB .NET在到达子例程的 结尾时将运行错误处理代码,从而导致不可意料的结果。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ② On Error Resume Next 该语句的作用是如果在过程中出现运行错误,将把流程 跳到发生错误的语句的下一条语句,再继续进行。使 用该语句可以将错误处理过程放置于错误可能发生的 地方,从而不需要在发生错误时将程序流程跳转到其 他位置。 如果在过程中调用了其他过程,则On Error Resume Next语句将在执行被调用的过程时被禁止。因此, 应该将On Error Resume Next语句放置于每个被 调用的过程中。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ③ On Error GoTo 0 该语句用于禁止当前过程中任何可用的错误处理代码块。 如果不包含On Error Go To 0语句,则当退出过程 时,其中的所有异常处理代码块都将被自动禁止。 On Error GoTo 0语句并不表示第0行是错误处理代码 的起始,即使过程中包含第0行。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ④ On Error GoTo -1语句 该语句用来禁止当前过程中任何可用的异常。如果不包 含On Error GoTo -1语句,则当退出它的过程时, 异常将被自动禁止。与On Error GoTo 0语句类似, 该语句也并不表示第-1行是错误处理代码的起始,即 使过程中包含第-1行。 下面通过一个实际的例子来说明On Error语句的使用。 例子的作用是把异常处理程序命名为DivideByZero 并处理除数为0的错误。如果发生不同的错误, VB .NET引发运行时错误并停止应用程序。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 示例代码如下: Sub ErrorTestExam () Dim m As Integer, m As Integer, k As Integer On Error GoTo DivideByZero 捕获错误,异常处理程序被命名为DivideByZero. 下面是代码的主体部分,可能产生错误 m=6 : n=0 k=m\n On Error GoTo 0 禁止异常处理 Console.WriteLine(m & / & n & = & k) 在执行错误代码之前应退出过程,如果该操作失败将产生意想不到的结果 Exit Sub 异常处理程序 DivideByZero: Console.WriteLine(You have attempted to divide by zero!) 输出错误提示信息 n=1 处理错误的代码 Resume 该语句将返回到首次发生错误的语句重新执行,应用程序可以继续执行下去 End Sub 注意:使用 On Error 的非结构化错误处理会降低应用程序性能并导致代码难以调试和维护。 建议使用结构化错误处理方法。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 (4)在“ErrorPro”行号指定的错误处理程序块中,通 过Select Case…End Select语句测试错误号,然后 决定相应的操作。错误号通过Err对象的Number属 性值取得。Err对象包含与运行时错误相关的信息, 在错误处理代码中通用对Err对象属性值的检测可以 知道发生的错误。 Err对象的属性值由刚发生的错误决定,Err对象的主要 属性有: ①Number属性:该属性包含了错误代码,即导致错误 的原因。 ②Description属性:该属性包含了发生的错误的描述 信息,是一个字符串属性。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 Err对象的常用方法有Raise和Clear,其格式与功能如下: ①Raise方法 [格式]:Public Sub Raise( ByVal Number As Integer, Optional ByVal Source As Object = Nothing, Optional ByVal Description As Object = Nothing, Optional ByVal HelpFile As Object = Nothing, Optional ByVal HelpContext As Object = Nothing ) [功能]:产生一个错误。 [说明]:参数Number 为必选参数,是用于标识错误的特性的 Long 型数据。 Visual Basic 错误范围在0~65535 内:范围 0~512 保留用于系统错误,范 围 513~65535 则用于用户定义的错误。当在类模块中将 Number 属性设置 为您自己的错误代码时,向 vbObjectError 常数添加您的错误代码号。例如, 若要生成错误号 513,应分配 vbObjectError + 513 给 Number 属性。参 数Source是一个可选参数,用来命名生成错误的对象或应用程序的 String 表 达式。参数Description也是一个可选参数,是用来设定描述错误的信息,是一 个字符串型表达式。例如,下列的程序代码是生成一个代号为513的用户定义的 错误: Err.Raise(vbObjectError + 513, SimpleCalCulator,本运算器现在不能用! ) 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 ②Clear方法:该方法用来清除Err对象的所有属性值。 任何错误处理程序都应该在其它错误发生之前,测试或 保存Err对象的相关属性值。在错误处理例程中的 Exit Sub、Exit Function、Exit Property 或 Resume Next 语句执行之后,Err 对象的属性重置 为零或零长度字符串 ()。在错误处理例程以外,使 用任何形式的 Resume 语句都不会重置 Err 对象的 属性。但可使用 Clear 方法显式地重置 Err。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 归纳说明: 异常处理是程序员在编写过程中必须要考虑的一件事, 好的异常处理能使程序具有较强的容错能力和纠错能 力。本任务通过计算器运算过程中容易出现的一些异 常的解决方法,讲解了非结构化异常处理的一般方法: 在容易发生异常的程序段前使用On Error语句指定错 误处理程序块,在错误处理程序块中对出现的异常进 行处理。在错误处理程序块中通过需要测试Err对象 的Number属性以获取错误的类型,从而实施相应的 处理。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 拓展与提高: 错误处理程序块完成之后想要使程序继续执行,可使用Resume语句,该语句 的形式主要有三种,下面分别加以讲述。 (1)Resume [0] 如果错误发生在错误处理程序所在的同一过程中,在错误处理程序中执行到该语句 时,程序将由产生错误的语句处继续执行。如果错误发生在被调用的过程中, 在错误处理程序中执行到该语句时,程序将从最近过程(该过程含有错误处理 例程)调用的语句处继续执行。参数0可以缺省。 (2)Resume Next 如果错误发生在错误处理程序所在的同一过程中,在错误处理程序中执行到该语句 时,程序将从引发错误的语句的下一条语句处继续执行。如果错误发生在被调 用的过程中,在错误处理程序中执行到该语句时,程序将从过程(该过程含有 错误处理例程)调用的语句的下一条语句继续执行。 (3)Resume line 在错误处理程序中执行到该语句时,程序将从必选参数line指定的代码行处继续执 行。line参数是一个行标签或者行号,必须位于错误处理程序所在的同一过程 中。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 使用该语句有以下两点需注意: (1)在错误处理程序中,还可以通过Exit Sub、Exit Function、Exit Property等语句退出发生错误的过 程。 (2)如果在错误处理例程以外的任何位置使用 Resume语句,将会引发错误。Resume语句不能用 在含有Try-Catch-Finally语句的过程中。 下面看一个Rsume语句的使用示例,该示例的作用是使 用 Resume 语句来结束过程中的错误处理,然后继 续执行导致错误的语句。 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 示例代码如下: Sub ResumeStatementDemo() On Error GoTo ErrorHandler 激活错误处理程序 Dim m As Integer = 68 Dim n As Integer = 0 Dim k As Integer k = m \ n 产生被0除的异常 Exit Sub 退出过程 ErrorHandler: 程序处理程序 Select Case Err.Number 测试错误号 Case 6 处理被0除的错误 n = 1 设置y的值为1,以便重新除 Case Else 此处放置处理其它错误的代码 End Select Resume 返回到发生错误的语句执行 End Sub 12.2 任务12-1:具有非结构化异常处理的简单计 算器——非结构化异常处理 思考与实训: 1.为什么要进行异常处理? 2.非结构化异常处理的一般模式是什么? 3.Err对象的Number属性和Description 属性各有什么作用? 4.编写一个除法计算器,用非结构化异常处 理方法除数为0的异常和所有其它异常。当 除数为零时,自动把除数设置为1,给出结 果不可靠的信息并重新执行除法运算得到不 可靠的结果,如图所示。如果发生了其它异 常则给出异常的提示信息,并退出过程,如 图所示。 不可靠的结果 其它异常的提示信息

  • 本文来自: 百姓2分快三,转载请保留出处!欢迎发表您的评论
  • 相关标签:vb程序  
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。