配色: 字号:
《Visual Basic程序设计教程(第3版)》第8章 程序调试与错误处理
2023-05-25 | 阅:  转:  |  分享 
  
程序调试的主要任务:查找程序的错误和排除错误 本章主要内容
VB程序中的错误类型程序调试错误处理退出第8章 程序调试与错误处理 三类错误类型:编译错误,运行时错误和逻辑错误
1. 编译错误 编译错误是指在程序编译过程中出现的错误。通常是由于不正确书写代码而产生的。 如:关
键字写错,遗漏标点符号,括号不匹配等。 示例: Foor t = 1 To 100 2. 运行时错误
运行时的错误是指应用程序在运行期间执行了非法操作所发生的错误。 举例(“下标越界”):
Dim D(20) As Integer, k As Integer For k=
1 To 30 D(k)=kK Ne
xt k8.1 VB程序中的错误类型 3. 逻辑错误 逻辑错误使程序运行时得不到预期的结果。这种
程序没有语法错误,也能运行,但却得不到正确的结果。 例如,在一个算术表达式中,把乘号“”写成了加号“+”,
条件语句的条件写错,循环次数计算错误等 例如,要求10!,若采用: Private Su
b Form_Load() Dim t As Integer
For i=1 To 10 t=ti Next
i Show :Print t End Sub 运行程序时输
出的结果是0 通常,调试程序过程中所花的大部分时间和精力都在逻辑错误上 8.2.1 程序工作模式
设计模式、运行模式和中断模式 1.设计模式 可以建立应用程序的用户界面,设
置控件的属性,编写程序代码等 2. 运行模式 可以测试程序的运行结果,可以与应用程序对话,还可以
查看程序代码,但不能修改程序 3. 中断模式 可以利用各种调试手段检查或更改某些变量或表达式的值,
或者在断点附近单步执行程序,以便观察程序的动态变化,找出可能的错误 8.2 程序调试 例8.0在代码窗口中设置断点鼠标单
击 使用“调试”菜单或“调试”工具栏 1.切换断点 “切换断点”按钮用来设置断点
2. 逐语句 逐条语句执行程序,每执行一条语句后就返回中断模式 如果执行的是过程调用的代码(如Cal
l),“逐语句”操作也会跟踪到被调过程中继续一条语句一条语句的执行 3. 逐过程 逐过程执行是以整个函数或
过程为一个整体,一次执行。逐过程与逐语句一样,能够一条语句一条语句地执行代码。把被调用的函数或过程当作一个语句来看待8.2.2
VB调试工具 4. 跳出 单击“调试”工具栏上的“跳出”按钮,则VB将连续执行完该过程的其余部分,返回调
用过程的下一条语句并回复中断模式 5. 本地窗口 显示当前过程中所有变量和活动窗体的所有属性值
Me代表当前窗体;单击“+”号或“-”号 6. 立即窗口 可以检查某个属性或者变量的值,也可
以对表达式求值,或为变量或属性赋值等 7. 监视窗口 对用户定义的表达式进行监视 例8.1
运行以下的窗体装载事件过程 Private Sub Form_Load() Dim mys As Integer mys
= "学习VB程序设计语言" MsgBox mys End Sub 运行时系统将弹出一个出错消息框,其中提示
发生“类型不匹配”的错误。为了检查出错原因,可以在立即窗口中键入以下命令来检查变量的值: ? mys
′?是Print的简写 从显示结果可以看出,出错前变量mys的当前值为数值0,它是一个整型变量,不能用字符串"学
习VB程序设计语言"为它赋值,故发生了“类型不匹配”的错误。例8.1 对于某些可预见的错误,可以利用VB的错误
处理程序捕获它,对其进行适当的处理,并使程序继续执行。这样就能够使开发的软件具有更强的适应性。 8.3.1 错误处理的步骤
(1) 利用Err对象记录错误的类型、出错原因等。 (2) 强制转移到用户自编的“错误处理程序段”的入
口。 (3) 在“错误处理程序段”内,根据具体错误进行处理,如果问题有解决方法,则在处理后返回原程序某处继续执行,否
则,停止程序执行 8.3 错误处理 Err对象是全局性的固有对象,用来保存最新的运行时错误信息,其属性
由错误生成者设置 1. 主要属性 (1) Number属性:数值。范围为0~65535,保存错误号
(2) Source属性:字符串。指明错误产生的对象或应用程序的名称 (3) Description属性
:字符串。用于记录简短的错误信息描述 2. 常用方法 (1) Clear方法:用于清除Err对象的当前
属性值。 (2) Raise方法:产生错误,用于调试错误处理程序段。 例如,执行语句Err.Rais
e 55将产生55号运行时错误,即“文件已打开”错误 8.3.2 Err对象 使用On Er
ror语句可以捕获错误,其语法格式如下: On Error 标号 通常,该语句放置在
过程的开始位置。在程序运行过程中,当该语句后面的代码出错时,则程序就会自动跳转到标号所指定的程序行去运行。 标
号所指示的程序行通常为错误处理程序段的开始行。 一个使用错误处理的示例: On Error
GoTo ErrLine ‘以后出错时转移至ErrLine .
. . ErrLine: ‘标
号 . . . Resume
‘返回语句9.3.3 捕获错误语句(On Error) 当指定的错误
处理完成后,应该控制程序返回到合适的位置继续执行。 返回语句Resume有三种用法: (1)Resume [0
]:程序返回到出错语句处继续执行。 (2)Resume Next:程序返回到出错语句的下一语句。 (3)R
esume 标号:程序返回到标号处继续执行。 8.3.4 退出错误处理语句(Resume) 错误处理流程主
程序On Error GoTo 标号 ……结束 对错误进行处理 …… Resume错误处理程序段
标号: 出错时转移处理后返回 指定的位置 输入某个数,求该
数的平方根。当用户输入负数时,使用On Error...Resume进行处理 Private Sub Form
_Load() Dim x As Single, y As Single, i As Str
ing On Error GoTo errln
''以下出错时转移到errln Show : i = ""
‘i 为实数标记
x = Val(InputBox("请输入一个数")) y = Sqr(x)
‘x 为负数时会出错
Print y; i : Exit Sub
‘显示及退出过程 errln:
''标号 If Err.Numb
er = 5 Then ''本错误的错误码为5
x = -x
''转换为正数 i = "i"
''复数标记
Resume ''返回
Else
''其他错误处理 MsgBox ("错误发生
在" & Err.Source & ", 代码为" & _
Err.Number & ", 即" & Err.Description)
End End If End Sub 例8.3 错误处理程序示例例8.3 程序运行时,当用户输入一个正数时,则显示出该数的平方根;如果输入的是一个负数,则因求负数的平方根(通过函数Sqr())而出错,此时会跳转到错误处理程序段。 在错误处理程序段中,先判断错误码,若是5(即发生求负数的平方根的错误),则将该负数转换为正数,设置复数标记,然后执行Resume语句返回到原出错处继续执行。 如果发生的不是错误5,则显示有关信息后强制结束
献花(0)
+1
(本文系大高老师原创)