当前位置:文档之家› 989067-Visual Basic 程序设计第4章 程序调试和错误处理

989067-Visual Basic 程序设计第4章 程序调试和错误处理

• 即上述代码累加的是1+2+ … +100+101,这与计算要求 不符!解决上述错误的方法很多,可以把intCon <= 100 改为intCon < 100,或把intCon += 1语句放到intSum += intCon语句的后面。
19
4.2 程序调试
• 程序调试是程序设计中必不可少的一部分,无论是经验丰 富的程序开发人员,还是刚开始学习编写程序的新手,都 会犯错误。因此,养成良好的程序调试习惯,培养程序调 试技能,才能写出好的程序。

intCon += 1 '累加控制变量递增

intSum += intCon '累加

Loop

'输出累加结果
• txtOutput.Text = intSum
• End Sub
25
• 运行“累加数”程序,在文本框中输入100,则在输出文 本框中显示累加结果为5151,可以看出,上述累加的结 果不正确,但程序没有提示任何错误信息。这说明程序中 存在逻辑错误!
26
4.2.1 设置断点
• 为了查找程序中的逻辑错误,需要跟踪程序运行过程及变 量值的变化。跟踪方式是通过设置断点,让程序运行时暂 停在指定的语句处,然后查看变量的当前值。
27
• 设置断点的方式很简单: • 方法1:在代码编辑器中将光标移到需要设置断点的语句
上,按F9键则在该位置设置断点;如果光标在设置了断 点的语句上,按F9键则取消该位置的断点设置。 • 方法2:鼠标左键单击需要设置断点的语句行对应的编辑 器左侧的灰色条,可以设置断点;用同样的方法可以取消 已经设置的断点。
图4-5 Do的自动纠错不能纠正Loopp
13
• 对于这类错误,要从前面的错误开始,综合分析,不能只 看单一的错误提示信息。其实只要根据第一个错误的提示 信息,找Loop的位置,进而会发现Loopp错误,即第二 个错误,把Loopp改正了,则所有的错误也就解决了!这 类错误在程序设计中经常出现,因此,程序设计人员要多 编程练习,多积累经验,才能快速的定位、解决这类语法 错误。
• 按Ctrl+Shift+F8键,或单击菜单中“调试|跳出”,或单 击工具栏中的,程序跳出当前断点继续执行。
30
• 当程序中断或单步执行时,在当前执行的语句的左侧会出 现一个指示箭头,如图4-8所示。
图4-8 左侧的箭头指示当前执行的语句
31
• 把光标移动到指示箭头上,可以按住鼠标左键移动指示箭 头到其它语句上,则程序会在指示箭头的新位置开始继续 执行。比如直接移动到txtOutput.Text = intSum语句, 则执行输出结果的语句。
• 防止产生执行错误的最好办法是在错误发生之前预计可能 出现的错误,并通过错误处理技术捕捉和处理错误。
15
4.1.3 逻辑错误
• 逻辑错误是指产生预料之外或不希望的结果的错误,产生 这类错误的原因是多方面的,可能是算法设计有问题,或 程序编写有错等。
16
• 例如:计算1+2+ … +100的和,有如下代码: • Dim intCon As Integer = 0 • Dim intSum As Integer = 0 • Do While intCon <= 100 • intCon +=1 • intSum += intCon • Loop
21
• 提示: – TextBox控件的ReadOnly属性为True时,该文本框内 容只读,即该文本框不能通过键盘输入内容,但可以 在程序中更改Text属性的值。
• ⑹ 为窗体添加1个Button控件,修改该控件的属性: Name为“btnConseculate”,Text为“累加”。
• ⑺ 双击“累加”按钮,在代码编辑器中添加对“累加” 按钮Click事件响应的代码:
28
• 设置断点后的语句上用特殊颜色显示,并在对应的行前显 示一个红色的圆点,当光标移到该圆点上时,显示断点设 置的位置的信息。如图4-7所示。
图4-7 在编辑器指定的代码行设置断点
29
4.2.2 控制程序执行
• 当程序执行到断点位置时,程序运行会暂停并切换到代码 编辑器窗口中的断点位置。如果要让程序继续执行,可以:
第4章 程序调试和错误处理
1
• 本章主要内容: • 程序设计中的错误类型。 • 设置断点,程序执行过程控制,监视变量值的变化。 • 异常处理概念及使用。
2
• 前面讨论了程序设计中的数据及其表示和存储、以及对数 据进行处理的算法的基本结构。大家可能已经注意到,在 编写程序时,经常可能出现各种各样的错误。对于一些语 法错误,Visual Studio 2005的智能感知IntelliSense能 够及时给出提示,但对于一些逻辑错误、运行错误,如果 没有相关代码进行处理,则可能出现一些系统提示的错误 信息、或造成死机等意想不到的情况发生。为此,程序代 码需要程序设计人员进行大量的测试和调试,减少代码语 句、逻辑出错的可能性。因此,培养程序调试的技巧与能 力,以及对程序中可能出现、或潜在的错误能够及时进行 处理,是程序设计人员必须掌握的技能。
• Visual Basic 2005 为程序设计人员提供的最基本的程序 调试方法是设置断点,跟踪程序的运行过程及变量值的变 化,进而发现程序中的错误。
20
• 例4.1 通过文本框输入一个整数,如果是负数,则转换为正数,并计 算1到该数的累加和,通过输出文本框输出。
• 具体操作过程: • ⑴ 新建项目,选择“Windows应用程序”, 项目名称为“累加数”。 • ⑵ 在解决资源管理器中把“.vb”文件名改为“累加数.vb”。 • ⑶ 打开窗体设计视图,选择Form1窗体,在属性框中修改窗体的属
17
• 上面的代码没有任何语法错误,但运行结果不正确,其原 因是存在逻辑错误,可以这样分析:
• 在开始Do While循环时,intCon的值是0,当执行完 intCon += 1后,intCon的值则为1,这时intSum += intCon的执行结果是把1加到累加和intSum中。然后进入 下次循环,可以看出,这种累加没有错误!
5
• ⑴ 有些简单语法错误是由于当前语句引起的,这种语法 错误的发现和解决都比较简单。
• 例如:在例3.13中计算最小水仙花数的代码中,如果把 Loop Until误输入成Loop Untile时,Visual Studio 2005 智能感知IntelliSense会在Untile下显示波浪线,当光标 移到Untile上时,提示信息显示“语法错误”,如图4-1 所示。

Dim intCon As Integer = 0 '累加控制变量

Dim intSum As Integer = 0 '保存累加结果
23
• '读取输入的内容

If Not (IsNumeric(txtInput.Text)) Then

MessageBox.Show("输入的内容包含非数字字符!", "错误")
性:Name为“frmConseculate”;StartPosition为 “CenterScreen”;Text为“计算累加数”。 • ⑷ 为窗体添加两个Label控件,Text分别为“请输入一个整数:”、 “累加结果:”。 • ⑸ 为窗体添加2个TextBox控件,Name分别为“txtInput”、 “txtOutput”。其中txtOutput控件的ReadOnly为“True”。
图4-3 由Loopp引起的错误信息
11
• 同时,在错误列表窗口中显示所有错误的简单说明,如图 4-4所示。
图4-4 由Loopp引起的错误信息列表
12
• 如果只看第3个错误,则可能莫名其妙,因为Until没有错 误!第一个错误是由于没有与之匹配的“Loop”,如果采 用自动错误纠正功能,纠正后的Loop也不会自动放在 Loopp处,更不会使用Loop自动纠正Loopp,如图4-5所 示。
9
• ⑵ 有时Visual Studio 2005智能感知IntelliSense提示的 错误位置,并不是真正引起错误的位置,错误可能发生在 其它位置的语句上。
10
• 例如:在例3.13中计算最小水仙花数的代码中,如果把 Loop Until误输入成Loopp Until时,Visual Studio 2005智能感知IntelliSense会把Loopp、Until自动看成方 法,用括号把Loopp后面的内容括起来,同时提示三处错 误信息,如图4-3所示。
• 按F5键,或单击菜单中“调试|继续”,或单击工具栏中 的,程序继续执行。
• 按F8键,或单击菜单中“调试|逐语句”,或单击工具栏 中的,程序逐语句执行。
• 按Shift+F8键,或单击菜单中“调试|逐过程”,或单击 工具栏中的,程序逐过程执行,即碰到过程时直接运行过 程,不会提示进入过程的执行过程。
14
4.1.2 执行错误
• 执行错误是指在运行过程中由于某些情况的出现,而引起 的错误,如果没有出现没有预知的情况,则程序可能不会 出现错误。
• 例如:如果程序要通过网络访问数据库服务器读写信息, 如果数据库正常运行,而且运行该程序的所有计算机能够 顺利访问到数据库,则程序可能不会出现错误。但如果数 据库由于某些原因停止了工作,这时程序如果把信息写到 数据库,则可能造成数据丢失!
3
4.1 错误类型
• 常见的错误类型有3种:语法错误,执行错误和逻辑错误。
4
4.1.1 语法错误
• Visual Studio 2005智能感知IntelliSense能够对一些语 法错误进行及时的提示,有些语法错误通过自动错误纠正 功能进行纠正,但有些错误需要程序设计人员进行分析, 根据实际情况进行解决。
相关主题