内容正文:
内蒙古自治区(计算机类)对口招生
《Visual Basic程序设计》复习讲义
模块 10 程序调试
考点 18 程序调试
【考纲要求】
1. 掌握错误类型;
2. 了解调试和排错;
3. 了解错误陷阱。
【知识网络】
【知识和技能要点】
一、错误类型
1. 语法错误
语法错误是指代码的书写不符合 Visual Basic 的语法规则,例如关键字拼错、圆括号不配对、缺少 End If、过程调用时参数个数不符、变量名起得不合规范等。这类错误的危害相对较小,因为在集成开发环境的设计模式下输入代码时系统就能自动检测出来并给出提示,程序也无法通过编译,因此一般不会带到运行阶段。
2. 运行错误
运行错误是指语法本身没有错,但程序在运行过程中执行了不能进行的操作,例如除数为零、数组的下标越界、打开一个并不存在的文件、把不能转换成数值的字符串拿去参与算术运算等。这类错误在编写代码的时候看不出来,只有运行到那一句才会暴露,系统一般会弹出对话框给出错误号与错误的描述,并中断程序的执行。
3. 逻辑错误
逻辑错误是指程序能够正常运行、也不报错,但运行的结果与题目预期的要求不一致。例如本该用加号却写成了减号、循环的初值或终值取错、判断条件写反、判断条件的前后次序安排不当等。这类错误系统无法自动发现,只能由程序员拿着输出的结果去对照题目要求,自行分析判断,因此三类错误中它是最难排查的。
二、调试和排错
1. Visual Basic 的三种工作模式
Visual Basic 的集成开发环境有设计模式、运行模式与中断模式三种。设计模式用来建立用户界面、设置属性、编写代码;运行模式用来执行程序;中断模式用来暂停程序的执行,以便查看当前的运行状态。"运行"菜单中提供的执行、中断和停止程序等命令,正是用于在三种模式之间来回切换的。
2. 常用的调试工具与手段
调试时最常用的手段有几种。立即窗口是专门为调试程序而设的,可以在其中直接用 Print 方法求出某个表达式的值;断点则在代码窗口中把光标停在某一行后按 F9 设置,程序运行到这一行就会暂停下来并进入中断模式;此外还可以直接写一条 Stop 语句,它相当于用编程的方式设置一个断点。本地窗口与监视窗口可以查看变量和表达式的当前取值,逐语句与逐过程则用于单步执行。
3. 排错的一般步骤
排错的一般步骤是:先根据系统给出的错误提示与出错的行号,判断它属于哪一类错误;对语法错误,直接按照提示逐条修改即可;对运行错误,则要检查该处语句涉及的各个操作数是否合法,必要时用立即窗口查看相关变量的取值;对结果不对而又不报错的情况,先要弄清正确的算法是什么,再逐句核对每一句的作用,通过输出中间结果的办法把出错的范围逐步缩小到某一句或某一段。
三、错误陷阱
1. On Error 语句
错误陷阱就是在程序中预先安排好处理错误的代码,使程序在出错时不会直接中断,而是转去执行事先写好的处理语句。设置错误陷阱使用 On Error 语句,常用的形式有三种:On Error Resume Next 表示忽略出错的这一句、继续执行下一条语句;On Error GoTo 标号表示出错后转到指定位置去处理;On Error GoTo 0 则用来取消本过程已经设置的错误陷阱。
2. Resume 语句与 Err 对象
在错误处理的代码中把错误处理完以后,一般要用 Resume 语句让程序接着往下执行,它有三种形式:Resume 重新执行出错的那一条语句;Resume Next 跳过出错的语句、执行它后面的一条;Resume 标号则转到指定位置继续执行。此外还可以用 Err 对象取得与错误有关的信息,其中 Err.Number 是错误号,Err.Description 是对错误的文字描述。
【真题】
2025年真题|第13题 在 Visual Basic 集成开发系统设计模式下,输入代码时可以自动检测( )
A. 语法错误
B. 编译错误
C. 运行错误
D. 逻辑错误
【答案】A
【解析】在设计模式下输入代码时,系统会随时检查所写语句是否符合 Visual Basic 的语法规则,一旦发现关键字拼错、括号不配对、缺少配对的结束语句等问题,就会立即给出提示,因此可以自动检测出来的是语法错误。运行错误只有在程序运行到出错语句时才会暴露,逻辑错误既不中断也不报错,两者都无法靠输入时的检查发现。
2026年真题|填空第125题 在程序设计过程中常遇到三类错误,分别是________、________和________。
【答案】语法错误;运行错误;逻辑错误
【解析】程序设计过程中常遇到的三类错误依次是:语法错误,指代码书写不符合语法规则,在设计模式下输入时即可被发现;运行错误,指语法没有错但运行到某一句时执行了不能进行的操作,例如除数为零或数组下标越界;逻辑错误,指程序能够正常运行也不报错,但结果与预期不符,只能靠分析判断找出。
【练习题】
一、填空题
1. 在程序设计过程中常遇到的三类错误是________、________和________。
【答案】语法错误;运行错误;逻辑错误
【解析】三类错误的区分标准是"能不能被自动发现":语法错误在输入代码时就会被系统检测出来,程序也通不过编译;运行错误要等运行到那一句才暴露,系统会给出错误提示;逻辑错误的语句完全合法、运行也不报错,只是结果与要求不符,只能由程序员自己分析。
2. 在三类错误中,输入代码时就能被系统自动检测出来的是________。
【答案】语法错误
【解析】在设计模式下输入代码时,系统会随时检查语句是否符合语法规则,一旦发现关键字拼写错误、圆括号不配对、缺少 End If 等问题就立即提示,所以语法错误能在输入阶段被发现。运行错误与逻辑错误都无法在输入阶段察觉,只能分别靠运行时的提示和自己的分析去找。
3. Visual Basic 的集成开发环境有设计模式、运行模式和________三种工作模式。
【答案】中断模式
【解析】三种模式各有用处:设计模式用来建立界面、设置属性、编写代码;运行模式用来执行程序;中断模式用来把程序暂停下来,以便查看各变量与表达式的当前取值。程序运行到断点或执行到 Stop 语句时都会进入中断模式。
4. 可以直接在其中使用 Print 方法求出表达式值的调试窗口是________。
【答案】立即窗口
【解析】立即窗口是专门为调试程序而设的,在中断模式下可以在其中直接用 Print 方法求出某个表达式的值,也可以给变量临时赋值,用来验证某一处的运行结果是否符合预期,是排错时最方便的观察手段。
5. 在代码窗口中把光标停在某一行后按________键可以设置断点;也可以用________语句以编程方式设置断点。
【答案】F9;Stop
【解析】断点用来让程序在指定的位置暂停,把光标停在目标行后按 F9 即可设置或取消;此外还可以在代码中写一条 Stop 语句,它相当于用编程的方式设置一个断点。程序运行到断点或 Stop 语句处都会暂停并进入中断模式。
6. 设置错误陷阱使用________语句;错误处理完成后,要重新执行出错的那条语句应使用________语句。
【答案】On Error;Resume
【解析】设置错误陷阱用 On Error 语句,常用的写法有 On Error Resume Next、On Error GoTo 标号与 On Error GoTo 0 三种。在错误处理的代码中处理完之后,用 Resume 语句让程序回到出错处继续执行;它的三种形式分别对应重新执行出错语句、跳过出错语句与转到指定位置。
二、单项选择题
1. 关键字拼写错误、括号不配对、缺少 End If 等属于( )
A. 语法错误
B. 运行错误
C. 逻辑错误
D. 都不是
【答案】A
【解析】这几类问题都是代码的书写不符合语法规则,属于语法错误。它们的共同特点是:在集成开发环境的设计模式下输入代码时系统就能发现并给出提示,程序也无法通过编译,因此比较容易修改,一般不会留到运行阶段。
2. 除数为零、数组下标越界、文件不存在等属于( )
A. 语法错误
B. 逻辑错误
C. 运行错误
D. 都不是
【答案】C
【解析】这几类问题的语法都是正确的,只有在程序真正运行到那一句时才会暴露出来,因此属于运行错误。系统遇到运行错误一般会弹出对话框给出错误号与错误描述,并中断程序的执行,程序中也可以用错误陷阱把它接住。
3. 程序能够正常运行、也不报错,但结果与要求不一致,这属于( )
A. 语法错误
B. 逻辑错误
C. 运行错误
D. 编译错误
【答案】B
【解析】程序既通得过编译、运行中也不出错,只是最后的结果与题目要求对不上,这是逻辑错误的典型表现,例如本该用加号却写成了减号、判断条件写反或循环的终值取错。系统无法发现这类错误,只能由程序员对照要求分析判断。
4. 三类错误中,最难发现、系统也无法自动检测的是( )
A. 语法错误
B. 运行错误
C. 编译错误
D. 逻辑错误
【答案】D
【解析】语法错误在输入代码时就会被提示,运行错误在运行到出错处时会弹出对话框,两者都能被系统发现。只有逻辑错误既不中断也不报错,程序照常运行完毕,只能靠程序员自己找出结果与要求之间的差异,因此最难排查。
5. Visual Basic 的集成开发环境有( )三种工作模式。
A. 设计、编译、运行
B. 编辑、运行、调试
C. 设计、运行、中断
D. 设计、编译、中断
【答案】C
【解析】集成开发环境的三种工作模式是设计模式、运行模式与中断模式。设计模式用来建立界面、设置属性、编写代码;运行模式用来执行程序;中断模式用来把程序暂停下来查看运行状态。编译只是运行前的一个环节,并不是一种独立的工作模式。
6. 用于调试、可以直接在其中用 Print 方法求表达式值的窗口是( )
A. 立即窗口
B. 窗体设计器窗口
C. 属性窗口
D. 工程资源管理器窗口
【答案】A
【解析】立即窗口是专门为调试程序而设的,在其中可以直接使用 Print 方法求出表达式的值,也可以临时给变量赋值。窗体设计器窗口用来设计界面,属性窗口用来设置属性,工程资源管理器窗口用来管理工程中的各类文件,三者都不具备求值功能。
7. 在代码窗口中把光标停在某一行后按 F9,其作用是( )
A. 运行程序
B. 结束程序
C. 删除该行
D. 在该行设置断点
【答案】D
【解析】按 F9 是设置或取消断点的快捷方式,断点所在的语句行上会出现醒目的标记。程序运行到断点处就会暂停下来并进入中断模式,此时可以通过立即窗口、本地窗口等查看各变量的取值,以便判断出错的位置。
8. 程序运行到断点所在的行时会( )
A. 自动跳过该行
B. 暂停执行并进入中断模式
C. 结束运行
D. 弹出一个对话框
【答案】B
【解析】断点的作用就是把程序在那里停下来,使它进入中断模式而不是结束运行,这样既能查看当前的运行状态,又可以在处理完之后让程序继续往下执行。程序结束运行用的是"运行"菜单中的结束命令,而不是断点。
9. 以编程方式设置断点的替代方法是使用( )语句。
A. End
B. Exit
C. Goto
D. Stop
【答案】D
【解析】在代码中写一条 Stop 语句,程序运行到它时会暂停下来并进入中断模式,作用与设置断点相同,因此它相当于用编程的方式设置了一个断点。End 用于结束程序的运行,Exit 用于从过程或循环中退出,Goto 用于转向,都不能起暂停调试的作用。
10. 要使程序出错后忽略该句、继续执行下一条语句,应使用( )
A. On Error GoTo 0
B. On Error Resume Next
C. On Error Stop
D. Resume
【答案】B
【解析】On Error Resume Next 表示一旦出错就跳过出错的这一句、继续执行下一条语句,常用于"允许个别数据不合法但不能让程序中断"的场合。On Error GoTo 0 是取消已设置的错误陷阱,Resume 用在错误处理的代码中让程序回到出错处继续执行。
11. 错误处理完成后,要重新执行出错的那条语句,应使用( )
A. Resume
B. Resume Next
C. Resume 标号
D. On Error GoTo 0
【答案】A
【解析】Resume 的三种形式中,单独写 Resume 表示回到出错的那条语句重新执行一次,适合在排除出错原因之后重试;Resume Next 是跳过出错语句执行下一条;Resume 标号则转到指定的位置继续。若只要取消错误陷阱,应使用 On Error GoTo 0。
12. Err 对象中保存错误号的是( )
A. Err.Description
B. Err.Message
C. Err.Number
D. Err.Code
【答案】C
【解析】Err 对象保存着最近一次错误的信息,其中 Err.Number 是错误号,Err.Description 是对该错误的文字描述。在错误处理的代码中常把两者一起显示出来,例如写成 MsgBox "错误号:" & Err.Number & "," & Err.Description。
三、程序填空题
1. 下列程序用错误陷阱处理除数为零的情况,出错时给出提示。请补充完整下列程序代码。
Private Sub Command1_Click()
Dim a As Integer, b As Integer, c As Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
[1]________ Error GoTo ErrHandler
c = a / b
Text3.Text = c
[2]________ Sub
ErrHandler:
MsgBox "除数不能为零!错误号:" & Err.[3]________
End Sub
【答案】[1] On;[2] Exit;[3] Number
【解析】设置错误陷阱要用 On Error 语句,故 [1] 处填 On;它后面跟 GoTo 与行标号,表示一旦出错就转到 ErrHandler 处去处理。正常情况下算完商之后应当结束这个过程,不再往下执行错误处理的代码,故 [2] 处填 Exit,与后面的 Sub 组成 Exit Sub 语句。要在提示框中显示错误号,应读取 Err 对象的 Number 属性,故 [3] 处填 Number;若想显示错误的文字说明,则应改用 Description 属性。
2. 下列程序在累加到第 50 项时暂停下来,以便通过立即窗口查看变量 s 的取值。请补充完整下列程序代码。
Private Sub Command1_Click()
Dim i As Integer, s As Integer
For i = 1 To 100
s = s + i
If i = 50 Then
[1]________
Debug.Print [2]________
End If
Next i
End Sub
【答案】[1] Stop;[2] s
【解析】要让程序在第 50 项处暂停下来进入中断模式,可以在循环体中写一条 Stop 语句,故 [1] 处填 Stop;它相当于用编程的方式在该处设置了一个断点。暂停之后要把变量 s 的当前取值输出到立即窗口中查看,应使用 Debug 对象的 Print 方法,输出的对象正是累加变量 s,故 [2] 处填 s。
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司
$