Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 柳青 严健武 第八章

上传人:E**** 文档编号:89426055 上传时间:2019-05-25 格式:PPT 页数:34 大小:920.50KB
返回 下载 相关 举报
Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  柳青 严健武 第八章_第1页
第1页 / 共34页
Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  柳青 严健武 第八章_第2页
第2页 / 共34页
Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  柳青 严健武 第八章_第3页
第3页 / 共34页
Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  柳青 严健武 第八章_第4页
第4页 / 共34页
Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  柳青 严健武 第八章_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 柳青 严健武 第八章》由会员分享,可在线阅读,更多相关《Visual Basic.NET程序设计 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 柳青 严健武 第八章(34页珍藏版)》请在金锄头文库上搜索。

1、第8章 程序调试与异常处理,本章导读 本章分析了程序异常类型、程序调试的基本方法和程序异常的处理。VB.NET中对异常的处理可以使用结构化的处理结构(Try结构,推荐使用),也可以使用非结构化的处理结构(On Error结构,与VB.NET以前版本兼容)。,8.1 程序错误类型,在程序设计或编写代码过程中,无论初学者或资深程序员,无论如何细心,发生错误总是难免的。程序中的错误,即“异常”,通常称为“Bug”。发现程序中的错误并进行修复的过程,称为“调试”。程序总是在不断调试和测试中完善的。 编程错误通常分为三类:编译错误、运行时错误和逻辑错误。 1. 编译错误 编译错误又称为“编译器错误”,是

2、指无法使程序正常启动运行 的错误,是一种最容易发现并修改的错误。用VB.NET编写代码时,以波浪线形式提醒出现错误的代码行,将鼠标移动到出现波浪线上方面,将出现错误提示。 一般可能出现错误的原因:变量在定义前使用;调用函数或过程参数个数或类型不匹配;对象参与不具备运算符的运算等。,案例8-1 变量定义前使用的错误。设某程序出现编译错误如图8-1所示。 图8-1 编译错误示例 如果此时按F5运行程序,将弹出错误提示对话框,如图8-2所示。 图8-2 编译错误对话框,单击“否”按钮,可以从“错误列表”对话框中看到错误的原因,如图8-3所示。 图8-3 “错误列表”对话框 2. 运行时错误 运行时错

3、误是程序运行时发生的错误。这种错误通常是初学者最容易犯的错误,原因是程序对用户任意可能操作或特殊的运行环境没有进行判断,程序设计过程没有错误,按正常操作也不会出现错误,这些错误通常是在程序试图执行不可能执行的操作时发生。,案例8-2 输入0100的分数,判断分数等级。 窗体布局 在窗体放置一个文本框和一个按钮,名称默认。 程序代码 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim score As Integer scor

4、e = TextBox1.Text If score = 90 Then MsgBox( “优秀“ ) ElseIf score = 80 Then MsgBox( “良“ ) ElseIf score = 70 Then MsgBox( “中“ ) ElseIf score = 60 Then MsgBox( “及格“ ) Else MsgBox( “不及格“ ) End If End Sub,运行结果 正确输入分数,如90,按F5运行程序,结果正确,如图8-4所示。 图8-4 案例8-2正常运行结果 假定用户输入数字30时,不小心把数字“0”输入为字母“O”,则出现运行错误,如图8-5与图

5、8-6所示。 图8-5 错误的输入,图8-6 “异常助手” 对话框 错误原因 文本框Text属性默认是字符串类型,字符串类型赋予数字类型时,最好进行显式转换。在赋值前,最好判断文本框中输入的数据是否数字(IsNumeric函数)类型,再进行赋值。,3. 逻辑错误 逻辑错误是程序能够通过编译并且可以顺利运行,运行过程也没有错误提示,但运行结果不是所期待的。逻辑错误是最难查找和修复的错误。 案例8-3 求两数相加的结果。 界面布局 在窗体放置三个文本框和两个标签控件,一个按钮控件,如图8-7所示。 图8-7 案例8-3界面布局,程序代码 Public Class Form1 Private Sub

6、 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox3.Text = TextBox1.Text + TextBox2.Text End Sub End Class 运行结果 图8-8 案例8-3运行结果 错误原因 字符串类型数据执行相加(+)运行,相当于执行字符串连接,而不是数学上的相加。,8.2 程序调试方法,对于运行时错误或逻辑错误,VB.NET的调试工具可以提供很大的帮助。两项调试技术,设置“断点”和“单步执行”代码可以帮助逐行检查

7、代码找出错误。 案例8-4 有一个包含学生分数的数组Score()= 100, 90, 60, 35.9,用GetAvg函数求其平均分。其中,Score 代表分数,Sum 代表总分,StudentNum代表学生人数。 界面布局 该例为了简单起见,只在窗体上放置一个按钮Button1。,程序代码,运行结果 程序运行结果如图8-9所示。 图8-9 案例8-4运行结果 错误原因 正确计算结果应该是71.475,而程序运行结果却是 0.0139,显然出现了逻辑错误。,案例知识点 1. 断点 断点是一个信号,它通知调试器,在某个特定点上暂时将程序执行挂起。当执行在某个断点处挂起时,称程序处于中断模式。进

8、入中断模式不会终止或结束程序的执行。可以在任何时候继续执行。 断点模式可以看作一种超时。所有元素(如函数、变量和对象)都保留在内存中,但它们的移动和活动被挂起了。在中断模式下,可以检查它们的位置和状态,以查看是否存在冲突或 bug。可以在中断模式下对程序进行调整。例如,可以更改变量的值;可以移动执行点,这会改变执行恢复后将要执行的下一条语句。在 VB.NET 中,甚至可以在中断模式下对代码本身进行更改(使用一种称为“编辑并继续”的强大功能)。 断点提供一种强大的工具,能够在需要的时间和位置挂起执行。与逐句或逐条指令地检查代码不同的是,可以让程序一直执行,直到遇到断点,然后开始调试。这大大地加快

9、了调试过程。没有这个功能,调试大的程序几乎是不可能的。,2单步执行 单步执行是最常见的调试过程之一,即每次执行一行代码,包含逐语句、逐过程和跳出三个命令。“逐语句”和“逐过程”的差异仅在于处理函数调用的方式不同。这两个命令都指示调试器执行下一行的代码。如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。 图8-10是VB.NET的调试菜单。调试常用项如下: “即时”窗口:用于调试和计算表达式、执行语句、输出变量值等,使用户得以在调试期间输入表达式,由开发语言对其进行计算或执行。 “断点”窗口:显示当前断点设置状态。 “逐语句”:表示逐行单步执行。 “切换断点”:

10、取消或建立新断点。,图8-10 “调试”菜单 调试过程 本案例涉及三个数据:分数Score,总分Sum,学生人数StudentNum。为了在程序运行过程中观察每一步执行后变量的值,在程序代码的第5、7、9、13行插入断点。 插入断点的方法:对需要插入断点的代码行单击鼠标右键,在快捷菜单中选择“断点插入断点”选项,如图8-11所示。,图8-11 “插入断点”快捷菜单 设置好的断点如图8-12所示。 图8-12 插入断点后的代码,其中,第7行是个循环。为了防止进入每一次循环时都中断,可以设置中断条件。 方法:用鼠标右击该“断点”符号,在快捷菜单中选择“条件”选项,为断点添加条件,如图8-13所示。

11、 图8-13 为断点添加条件,循环到最后一次才中断,断点设置完毕,启动程序,单击按钮Button1后,程序执行Buttton1_Click事件过程代码。每当遇到断点,程序都暂时停止运行。遇到第一个断点(第5行)时,将鼠标移动到需要观察的变量上方,可以看到该值的提示,如图8-14所示。 图8-14 Score.Length变量值 按F5键继续运行程序,移动到第3个断点,如图8-15所示。 图8-15 第3个断点的变量值,按F8间单步执行,到达GetAvg函数处时,此处非断点,由于是单步执行,执行后的变量侄如图8-16所示。: 图8-16 单步执行后的变量值 到此,观察到的变量的值都没有错误。再按

12、F5执行到最后一个断点,可以发现计算的错误原因:总分(Sum)和人数(Num)变量的值位置相互调换了,如图8-17所示。 图8-17 最后一个断点的变量值 错误原因:第12行调用GetAvg函数时,参数传递位置倒过来了。 改为:MsgBox(“平均分“ & GetAvg(StudentNum, Sum) 程序再次运行可得到正确的结果。错误修复后,将断点删除。方法:在菜单栏上选择“调试删除所有断点”选项。,8.3 结构化的异常处理,案例8-5 复制不存在的文件,捕获异常原因。 程序运行结果如图8-1与图8-2所示。 图8-18 程序异常信息提示 图8-19 显示程序异常原因,案例知识点 异常是程

13、序执行时遇到的任何错误情况或意外行为。设计良好的错误处理程序块集可以使程序更可靠且不容易崩溃。 常见引发异常的情况:代码或调用的代码(如共享库)中有错误;操作系统资源不可用;公共语言运行库遇到意外情况(如无法验证代码)等。 Exception是异常的基类。若干异常类直接从Exception继承,其中包括 ApplicationException和SystemException。这两个类构成几乎所有运行库异常的基础。在.NET的Framework 中,异常是从Exception 类继承的对象。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。 1. Try.结构语法

14、格式: Try tryStatements 可能发生错误的语句 Catch exception As type When expression catchStatements 发生错误时处理语句Finally 在所有其他错误处理结束后执行的语句 End Try,2. 结构说明:见表8-1 表8-1 Try结构说明,程序代码 Try File.Copy( “c:abcv1.txt“ , “C:H.TXT“ ) Catch ex As Exception MsgBox(ex.Message) MsgBox(ex.GetBaseException.ToString) End Try 代码说明 将可能

15、引发异常的代码段放在 Try 块中,将处理异常的代码放在Catch 块中。 Exception:所有异常的基类,如果不确定代码会发生何种异常,使用Exception。 Exception的主要属性: Message:获取当前发生异常的详细信息描述 Source:获取当前发生异常的应用程序名或对象名称 GetBaseException:返回一个以上后续发生异常的原因,如上图图:,知识点进阶 引发或处理异常时,将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况,而不是为了处理可预知的事件或流控制。例如,如果方法参数无效,而应用程序需要使用有效的参数调用方法,则可以引发异常。无效的方

16、法参数意味着出现了异常情况。相反,用户偶尔会输入无效数据,这是可以预见的。因此,如果用户输入无效,不需要引发异常。这种情况下,应提供重试机制,以便用户输入有效数据。就本案例而言,最好的方法是先检测文件是否存在,存在则复制,不存在则提示文件没找到,而不是使用异常机制。 大多数错误都可以通过验证以及与错误接近的错误处理代码进行处理;不需要引发和捕捉异常。通用异常处理程序捕捉的是在应用程序任意位置引发的、真正不可预期的异常。 异常发生时,执行将终止,控制交给最近的异常处理程序。这意味着不执行希望总是调用的代码行。有些资源清理(如关闭文件)必须总是执行,即使有异常发生。为实现这一点,可以使用 Finally块。Finally 块总是执行,无论是否有异常发生。,1. Exception 部分异常类:见表8-2。 表8-2 Exception 部分异常类,续上表,2. IO异常类 一般IO操作引发的异常IOExcept

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号