ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:556.26KB ,
资源ID:4105334      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4105334.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序的调试国海涛.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

程序的调试国海涛.docx

1、程序的调试国海涛10 V程序的调试与异常处理当程序有了一定的复杂程度后,无论用户在编写程序时如何仔细,错误总是不可避免的。有些错误非常简单,很容易排除。而有些错误隐藏得很深,必须采用一些特殊的手段才能找出来。本章学习Visual Studio.NET中一些常用的调试方法如:在代码中设置断点等。调试是任何开发项目中一个不可少的部分,因为它可以帮助找到代码和逻辑中的错误。10.1主要错误类型为了更有效地使用调试工具排除程序中的错误,开发人员必须对可能产生的错误有一个全面的认识。程序中的错误千差万别,各不相同。综合起来可以将这些错误分为四类,分别是:语法错误、编译错误、运行错误、逻辑错误。10.1.

2、1语法错误当程序的编写出现了违反VB.NET语法规则的地方,就会发生语法错误。比如说变量没有声明、参数类型不匹配等。此类型的错误通常发生在程序员对语言本身的熟悉度不足,如If之后忘了加上Then,For语句少了Next。还有比如定义一个变量是student,但是在引用的时候不小心就变成studnet了。在编译程序之前,VB.NET会及时发现程序中的语法错误,并用波浪线标示出来。当把鼠标移到该处时,系统会相应的出错提示信息(如图10.1)。语法错误是最容易发现和改正的错误。图10.1 语法错误示例10.1.2 编译错误编译错误是指程序在编译过程中出现的错误。编译错误是由于不正确编写代码而产生的,

3、比如非法使用或丢失关键字、遗漏了某些必需的标点符号、函数调用缺少参数或括号不匹配等。下面的代码都会导致编译错误:For I=l To 100 For关键字写错X=MathSin 函数调用缺少参数10.1.3 运行错误运行错误是指程序中的语句本身是正确的,但是这些语句在运行时无法正确执行,从而导致程序发生错误。运行错误比语法错误更加隐蔽,这是因为运行错误是在程序执行时遇到了一些非法操作引起的。这类错误常见的有:打开一个不存在的文件、磁盘空间不足、网络连接断开、除运算中除数为0、从服务器读取数据时发生服务器断开连接、输入的数据类型不匹配等。这类错误在程序编辑或编译时不会被发现,只有在运行时才会发现

4、。程序在运行时发生错误,系统通常会给出一个错误提示信息,然后终止程序的运行。10.1.4逻辑错误逻辑错误是指程序算法的错误,这种错误程序不会发生任何程序中断或跳出程序,而是一直执行到最后,可能会有结果,但是执行结果是不对的。此类错误是最常见的,也是最难发现和调试的。例如: Dim i,total As Integer While i10 total+=I i+=l End While MsgBox(total)很明显这个算法有问题,应该是i=10,不是i10,因此执行出来的结果少了10,结果为45。这种错误调试困难,因为程序员认为它是对的,所以只有程序员细心测试,以及调试工具的协助。10.2程

5、序的调试在学习调试之前,先熟悉一下VB.NET的三种模式。(1) 设计模式(设计) 在设计模式下,可以进行程序的界面设计、属性设置、代码编写并定位语法错误,但是不能测试逻辑错误和运行时错误。(2) 运行模式(运行)执行启动命令进入运行模式。在运行模式下,可以检查程序的执行,并检测逻辑错误和运行时错误,但不能对代码作任何更改。(3) 中断模式(Break)执行中断命令,进入中断模式。在中断模式下可以查看代码、修改代码、检查数据。通过专用的工具在应用程序中查找并修改错误的过程称为调试。Visual Basic.NET提供了强大的调试工具,使用这些工具能帮助分析程序运行过程,并分析变量和属性是如何随

6、着语句执行而改变的,从而深入到应用程序内部,确定代码到底发生了什么问题,以及为什么会发生。Visual Basic.NET调试工具包括:断点、调试工具栏和调试窗口。Visual Basic.NET的这些强大的调试工具和功能可以帮助开发人员快速完成程序调试任务,并排除程序中的错误。10.2.1 VB.NET的调试工具使用调试工具时,可以通过【调试】菜单,也可以使用【调试】工具栏。如果调试工具栏没有再工具栏上显示,可按下面的步骤打开【调试】工具栏。(1)选择【视图】【工具栏】菜单项。(2)在【工具栏】下的子菜单中选择【调试】命令,【调试】工具栏会出现在Visual Basic.NET的桌面上。10

7、.2.2 常用的调试对话框调试应用程序时,经常要分析应用程序的程序段或语句的运行结果,并希望能够看到变量、属性、表达式等值的变化,以便找出错误所在处。为便于观察程序块或语句的运行结果,VB.NET提供了很多调试对话框,利用这些对话框可以提高程序调试的效率。(1)任务列表窗口在Visual Basic.NET中,如果开发人员的应用程序中存在没有清除的语法错误,在调试时,调试程序会查找到这些语法错误,并将错误信息显示在【任务列表】窗口中。【任务列表】窗口不但显示出错误的类型和说明,还显示出错的文件,以便开发人员快速定位和修改错误。如果要马上修改某一个错误,可以在任务列表中双击它,IDE会自动跳转到

8、代码窗口中,并加亮显示相应的错误内容。 实际上,【任务列表】窗口在开发人员设计程序时也存在,只是没有显示出来。如果开发人员要在编写代码时打开“任务列表”窗口,显示所有没有发现的语法错误,可以选择【视图】【显示任务】【生成错误】命令(如图10.2)。图10.2任务列表窗口(2)输出窗口Visual Basic.NET把【输出】窗口的功能分为两部分:调试和生成。在【输出】窗口中,从【生成】选项可以查看调试的程序生成的内容,包括成功的个数和失败的个数。如果没有生成失败,表明程序创建成功。如果开发人员要查看调试输出结果,可从【输出】窗口中的下拉列表框中选择【调试】选项,窗口中就显示出所有已经加载的内容

9、和输出结果。图10.3输出窗口(3)【命令】对话框在VB.NET中,有一个【命令】对话框,在该对话框中可以直接使用VB.NET的各种命令与系统交互。利用它可以通过查询并设置变量的值,来控制程序的执行和输出。【命令】对话框有两种不同的模式:命令模式和立即模式。命令模式主要用来执行命令,立即模式主要用于调试程序。在调试应用程序执行函数或语句等操作时,可使用立即模式查看,并更改变量的值。通过执行【调试】【窗口】【即时】命令,可以以立即模式打开【命令】对话框。当命令窗口处于立即模式时,标题栏显示【命令窗口-立即】。图10.4 示例程序图在上图程序调试过程中,在【命令】对话框中输入?i和?j,显示如图1

10、0.5:图10.5立即窗口在【命令】对话框中也可以改变变量的值,与在程序中修改变量值的格式一样:变量名=变量值。在上面程序中输入i=5,然后再输入?i和?j,显示如图10.6。很显然i的值发生了变化。图10.6立即调试结果显示(4)【监视】对话框【监视】对话框用于显示当前被监视表达式的值。【监视】对话框只能在运行模式或中断模式下打开,打开方法是执行【调试】【窗口】【监视】命令。若要在【监视】对话框中添加被监视表达式,只需单击【监视】对话框名称列最下面一行单元格,在其中输入要监视的表达式即可。【监视】对话框是最有用的对话框之一,在逐语句运行的情况下,通过该对话框可以看到每执行一条语句时,监视表达

11、式值的变化情况。图10.7显示在运行到所设置的断点处,变量i、j的值,并可以看到数据类型、取值范围等。图10.7监视对话框利用watch【监视】也可以方便的观察表达式的值,如图10.8添加表达式i*j。图10.8监视结果查看当程序处于中断模式时,只能在QuickWatch【快速监视】(图10.9)对话框中添加和删除变量或者表达式。因此在运行程序之前,需要在想监视的变量或者表达式之前设置一个断点。运行到断点后,单击调试菜单,并选择QuickWatch【快速监视】,打开QuickWatch【快速监视】对话框,在表达式下拉列表框中添加表达式i+j,然后单击关闭,可以看到i+j的结果显示在监视对话框中

12、,如图10.10。图10.9快速查看窗口图10.10查看结果(5)【局部变量】对话框【局部变量】对话框和监视对话框非常的相似,但显示当前过程中所有局部变量的值。【局部变量】对话框也可以改变变量或对象的值,方法与监视对话框相似。当程序从一个过程执行到另一个过程时,【局部变量】对话框的内容也会随之改变。该对话框只显示当前所执行过程中局部变量的值。要打开【局部变量】对话框,可执行【调试】【窗口】【局部变量】命令,显示如图10.11。图10.11局部窗口10.2.3 常用调试方法(1)设置程序断点在调试一个大程序是,经常只需要调试其中的一部分代码。也就是说,让代码运行到某一处然后停下来。这时候需要断点

13、。断点可以让代码在任何定义断点的地方停止。当然可以在代码的任何位置设置断点,代码运行到设置断点处的前一行就会停下来。在设置断点的那行的前面显示一个小红球。注意程序执行是不能设置断点,当可以在程序空闲时,等待输入时设置断点。断点是应用程序暂时停止执行的位置,也是让应用程序进入中断模式的地方。在程序设计中,可以在中断模式和设计模式下设置和删除断点。在调试程序时,按照程序的功能,可在怀疑有错误的语句处设置断点,这样有利于发挥测试程序的功能和发现程序的逻辑错误。设置断点的方法主要有以下几种:1)在代码窗口中,单击要设置断点的那一行代码,然后按【F9】键。2)在代码窗口中,在要设置断点的那一行代码行上,

14、单击鼠标右键并选择【插入断点】命令。3)在代码窗口中,在要设置断点的那一行代码行的左边界上的竖条上单击。图10.12设置断点(2)跟踪程序执行当程序出错的具体位置不易确定,只能够猜测到在某个范围内可能存在问题时,需要在此范围内追踪程序的执行结果,逐条地执行语句。这种运行方式称为“跟踪”。Visual Basic.NET提供的跟踪方式有:逐语句(Step Into)、逐过程(Step Over)和跳出(Step Out)。第一个图标是Step Into(逐语句执行)。逐语句执行方式为一次执行一条语句,也叫单步执行。包括单步调试遇到的任何函数或过程,并对这些函数或过程中的代码进行单步调试。每执行一

15、条语句之后,开发人员可以使用【即时】窗口、【局部变量】窗口或【监视】窗口查看语句执行的效果。第二个图标是Step Over(逐过程执行)。编写复杂的应用程序时,应用程序的一个过程通常会调用另一个过程或函数,有时候,并不想了解调用过程的执行细节,而只想关注当前过程的执行情况,可以使用【逐过程】命令。也就是说这些函数或过程仍在执行,只是其中的代码是一次执行完的。第三个图标是Step Out(跳出)。【跳出】命令连续执行当前过程剩余部分的语句,并在调用该过程的下一行处中断执行。当单步执行到一个很长的过程中,想退出该过程时可以使用该图标,过程中的其余代码会一次性执行,而不是单步调试执行。10.2.4

16、调试案例新建基于Windows应用程序的Visual Basic.NET项目。在Form1_Load实践中添加如下代码。Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim se As String Label1.Text = Space(35) & 九九乘法表 & vbCrLf Label1.Text &= Space(35) & - & vbCrLf For i = 1 To 9 Label1.Text &= Space(8 * (i - 1)

17、+ i) For j = i To 9 se = i & & j & = & i * j Label1.Text &= se & Space(8 - Len(se) Next j Label1.Text &= vbCrLf Next i End Sub下面利用这个案例来说明中断模式。可以利用上面的方法,设置断点,在编辑器中的显示如图10.13所示。图10.13 设置断点可以通过【调试】【窗口】调出我们上面讲的各个对话框,如图10.14。图10.14 调试常用窗口参照上面讲的每个窗口的方法,可以进行调试。10.3异常处理调试工具的使用只能用于清除程序代码中存在的错误,无法处理运行过程中发生的非预

18、期的或不正常的错误,部分异常错误可以设计程序时考虑到并采取预防措施,从而避免程序的异常终止。“异常” 是指应用程序在执行过程中遇到的错误或意外,从而导致应用程序终止执行,它来自于程序本身或运行时环境。在出现生异常时,CLR创建一个称作异常的特殊对象,该对象中的方法和属性详细描述了异常情况以及引起错误的具体原因。“异常处理”是指程序运行时出现错误时采取相应措施的.NET技术,异常处理需要在编程过程中事先设定,在程序出错时能够得到详细信息和补救的重要手段。10.3.1异常的重要属性和方法异常对象是一个包含错误相关信息的对象,这些信息显示为该对象的属性。该对象是派生于System.Exception

19、类的一个实例。Exception类的属性包含了关于异常的信息。查看其属性可以确定代码位置、类型以及异常的起因。Exception对象的一些常用属性如表10-1所示。表10-1Exception类的属性属性说明Data 获取一个提供用户定义的其他异常信息的键/值对的集合。HelpLink 获取或设置指向此异常所关联帮助文件的链接。HResult 获取或设置 HRESULT,它是分配给特定异常的编码数值。InnerException 获取导致当前异常的 Exception 实例。 Message 获取描述当前异常的消息。Source 获取或设置导致错误的应用程序或对象的名称。StackTrace

20、获取调用堆栈上直接帧的字符串表示形式。TargetSite 获取引发当前异常的方法。 表10-2Exception类的方法属性说明Equals(Object)确定指定的 Object 是否等于当前的 Object。 (继承自 Object。) Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) GetBaseException当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根源。 GetHashCode用作特定类型的哈希函数。 (继承自 Object。)GetObjectData 当在派生类中重写时,用关于异常的信

21、息设置 SerializationInfo。GetType获取当前实例的运行时类型。 ToString创建并返回当前异常的字符串表示形式。 (重写 Object.ToString。)MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。) 详情参考:10.3.2结构化处理简单来说,结构化异常处理就是使用包含异常、单独的代码块和筛选器的控制结构创建异常处理机制。它使代码可以区分不同的错误类别,并根据相应的情况做出响应。与非结构化异常处理相比,结构化异常处理更强大,更具普遍性和灵活性。.NET中所有编程语言采用统一的错误处理方式,即“结构化的异常处理”。Try

22、Catch.Finally 控制结构是结构化异常处理的基本结构。它测试代码片段,筛选该代码执行过程中产生的异常,并根据产生的异常类型做出不同的响应。将可能产生异常的代码段放在Try 语句之后,将对异常进行处理的代码段放在Catch或Finally之后。TryCatch.Finally语法如下:格式:Try 可能产生异常的语句系列 Catch 异常变量1 As 异常类型1、 异常处理语句序列1 Catch 异常变量2 As 异常类型2 异常处理语句序列2 . . Finally 异常处理语句序列nEnd Try说明:(1)Try 语句提供正在测试异常的代码。 (2)Catch 子句标识与特定异常

23、相关联的代码块,Catch 子句按其在代码中出现的顺序执行。Catch子句可采用三种格式:Catch、Catch.as 和 Catch.when。不包含 when 关键字的 catch 子句允许相关的语句块处理所有异常。catch.as 和 catch.when 子句捕捉特定的异常,并允许相关的语句块指导应用程序如何处理。也可以将 catch.as 和 catch.when 子句组合成一条语句,例如:Catch ex as exception when intresult 0。 (3)不管 try 块中是否发生异常,finally 语句所包含的代码始终会执行。即使在 exit try 或 ex

24、it sub 语句后也会执行 finally 语句。此代码通常执行清除任务,例如关闭文件或清除缓冲区。 当“可能产生异常的语句系列”出现异常时,将判断异常的类型。如果异常类型是“异常类型1”,将执行“异常处理语句序列1;如果异常类型是“异常类型2”,将执行“异常处理语句序列2”;依此类推。其中的“Finally”和“异常处理语句序列n,是可选项。如果存在该可选项,执行完前面的异常处理的语句序列后,将执行“异常处理语句序列n”。在异常处理的语句序列中,可以使用Exit Try。Exit Try的功能是结束异常处理结构,跳出Catch程序段并跳到Finally处,若没有Finally语句则运行En

25、d Try之后的语句序列。Finally代码段通常做代码清除工作。【案例】 TryCatch.Finally 语句举例。Private Sub Form1_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles MyBase.Click Dim N01 As Integer Dim N02 As Integer Dim RESULT As Integer Try N01 = InputBox(请输入被除数:) N02 = InputBox(请输入除数:) RESULT = N01 / N02 Catch ERR1

26、 As System.OverflowException 表示发生溢出错误 If N02 = 0 Then MsgBox(0不可做除数!) Exit Try 跳出Catch程序段并跳到Finally处 End If Catch MsgBox(发现其它错误!) Finally MsgBox(处理完毕!) End Try MsgBox(结果为: & RESULT.ToString) End Sub(1)本题中第一条Catch语句捕获一个指定类型的异常,即产生溢出的异常,并且设置了Exception类的对象变量ERR1;第二条Catch语句可以捕获在Try代码段出现的其它任何异常。(2)Finally块是可选项,然而若有Finally块,最后就一定会执行,不管程序是否发生了异常。(3)双Catch语句捕捉是一种良好的捕捉异常的方法,如果异常逃脱了第一条Catch语句,第二条语句肯定可以捕捉到它!10.4 小结本章讲述了Visual B开发环境中常用的调试方法和异常处理,通过例子说明了如何使用这些工具调试程序。通过本章的学习主要掌握断点调试和单步执行;熟悉调试常用的各个窗口,比如局部窗口和监视窗口。本章还讲述了异常处理,应该在任何时候将这部分内容合并到程序中去。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2