| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> VB.NET >> vb.net技巧 >> 文章正文
[组图]vb.net程序的调试和错误处理            【字体:
vb.net程序的调试和错误处理
作者:-    文章来源:-    点击数:    更新时间:2006-12-18

任何程序员在编程的时候都不可能一次通过,肯定会出这样那样的错误,会有一些意想不到的情况发生,而你不会想到这些情况会导致代码的失败。对于错误的调试和在编程过程中对可能出现错误的地方给出提示或进行错误处理是编程中的重要部分,当然良好的编程习惯丰富的学术知识是编好程的前提。 Visual Studio.NET有一个构建到开发环境中的复杂的调试器。这个调试器适用于Visual Studio.NET支持的所有语言,这样只要掌握了一种语言的调试技巧,对于Visual Studio.NET支持的任何语言,你都可以进行调试,很方便吧。

如果你没有遇见某些错误并处理这些错误,使用者可能会看到原始的错误信息,是关于CLR(Common Language Runtime,公共语言运行时)给予的一个未进行处理的异常信息。这个消息用户并不容易理解,用户也不知道接下来要干什么或者说如何处理错误。利用Visual Studio.NET提供的可用于所有语言的通用错误处理功能,你可以去检测代码并捕捉可能发生的任何错误。如果确实发生了一个错误,你可以把原始的错误信息变成用户容易理解的信息,并告诉用户应该怎么办。

首先我们要了解可能发生的错误都有哪些。 错误类型主要分为3种:语法错误、执行错误和逻辑错误。当然很多时候我们可能查了半天也没查出错误,不用太着急,也不必浪费过多的时间来独自查错,你可以待会再回来查,换换脑子,或者让别人帮你看一下,这样会快一些。

1.语法错误

当计算机不能“理解”你所编写的代码时就会发生语法错误。这可能是因为指令不完全、提供指令的顺序有问题,或者参数传递错误等等。例如,声明一个变量,但在后面用到这个变量时不小心把名称写错了,这是发生的就是语法错误。语法错误是最易于发现和确定的错误Visual Studio.NET中的开发环境有一个相当复杂的语法校验机制,它对变量和对象提供了即使的语法校验,可以让你在出现语法错误时立刻知道。当你想使用未经声明过的变量或对象时,Visual Studio.NET开发环境会在该变量或对象名称下面加下划线。如果你将光标放在这个语法错误上,开发环境就会显示出工具提示表明这个错误。

上面的提到的下划线和提示是在没有改变Project的Property Pages对话框中的Option Explicit选项为前提的,在默认情况下它 是开启的.同样也是在没有指定代码中的Option Explicit Off语句,它会覆盖Project的Property Pages对话框中的Option Explicit选项如果将Option Explicit选项或语句设置为On,就会强迫你在使用变量之前先对它们进行声明,否则就会出现上图所示的错误。在编译时也会收到错误报告。关闭该选项或语句时,所有为显式声明的变量都假定为Object数据类型,以下是MSDN当中对Object的解释:

The Object data type is a 32-bit (4-byte) address that points to an object within your application or in some other application. When you declare a variable as Object, you can subsequently use it to refer to any object recognized by your application, as in the following
example:
Dim objDb As Object
Dim MyCollection As New Collection()
' ... Suppose MyCollection has now been populated.
objDb = MyCollection.Item(1)

Object数据类型可以保存任何类型的值,但与这些值相对应的数据类型相比,它处理这些值的速度要慢。所以建议开启Option Explicit选项。

上面的提到的下划线和提示是在没有改变Project的Property Pages对话框中的Option Explicit选项为前提的,在默认情况下它是开启的。同样也是在没有指定代码中的 Option Explicit Off语句,它会覆盖Project的Property Pages对话框中的OptionExplicit 选项如果将Option Explicit选项或语句设置为On,就会强迫你在使用变量之前先对它们进行声明,否则就会出现上图所示的错误。在编译时也会收到错误报告。

2.执行错误

执行程序时所发生的错误就是执行错误。大部分的执行错误的发生是因为开发人员不能预料并实现合适的错误处理逻辑。下面是一些比较典型的执行错误:

1. 用零作为除数
2. 访问不存在的文件
3. 访问没有设置维数的数组
4. 访问超过上限的数组
5. 调用一段程序,给它传递错误的变元数目或错误类型的变元

防止执行错误的最好方法是在错误发生之前先进行预先的考虑,并用错误处理技术捕捉和处理错误。还应该在部署代码之前彻底检测一番。

3.逻辑错误

逻辑错误是指产生意料之外或多余结果的错误,这类错误是最难找到也最难发现故障的错误。假定在数据库字段或在文件中的文本中用代 码设置一个字符串变量,将这个字符串变量和用户输入的文本做一下比较。如果包含文本的变量是大写字母和小写字母 混杂的,而用户输入文本全部是大写或全部是小写的,那么这个比较就会失败。要防止这样的逻辑错误,可以将进行比较的双方都转换为大写或者小写字母。可以用UCase和LCase函数。Returns a string or character containing the specified string converted to uppercase.Returns a string or character converted to lowercase.逻辑错误的另一个普遍类型是在处理应用程序特殊的文件是产生的。假定有一段应用程序用来以某种格式创建文件,并且允许用户打开并编辑这些文件。当用户用不同的格式打开文件时,文件不会包含程序所期望格式的数据,这样当用户试图处理该文件时就会发生逻辑错误或执行错误。处理的方法是检验一下文件的第一行以确保文件包含了所期望的数据格式。

下面我们来了解一下Visual Studio.NET开发环境中的一些内置的调试功能。

1.断点

在调试一大段程序时,你可能想让代码运行到某一处然后停下来检查是否是你所预期的结果。这时就要使用断点了,他们可以让代码在任何定义断点的地方停止,并且你可以在任何地方设置断点。注意,在设置断点的那行之前就会停止代码的执行。

你可以在编写代码是设置断点,也可以在运行时通过转换到代码窗口中在你所希望的位置进行设置。当程序正在实际执行一段代码时,不能为它设置断点。当开发环境遇到一个断点时就会停止执行代码,应用程序将处于中断模式。只有在程序处于中断模式时,才能使用调试功能。

设置断点很容易,通过单击代码行旁边的灰边上的想要设置断点的位置,就可以在设计时或运行时的代码中进行设置了,断点是一个红色的圆点。当运行了包含断点的工程时,应用程序将暂停在有一个黄色的箭头指向的断点处。此时,开发环境的底部会有几个新窗口。

(1).Breakpoints窗口

Breakpoints窗口会显示出你所设置的所有断点,加亮显示的断点就是当前断点。在这个窗口中可以设置新的断点,删除原有的断点,改变断点的属性。

(2).Debug菜单的图标

我们常用的是下面四个图标

分别是:Step into,Step over,Step out,Run to Cursor。前三个图标我想大家应该非常清楚,这里就不多介绍了。现在说说Run to Cursor,我们可以将光标放在当前断点之后的任何想要暂停程序执行的地方,然后单击该图标就会执行当前断点和光标所在的位置之间的代码,到了光标所定位的那行代码执行就会停止。访问计数器:在Breakpoints窗口单击某个断点,然后在Breakpoints窗口中单击工具栏上的Properties图标。会出现这个断点的Breakpoint Properties对话框

单击Hit Count按钮调用Breakpoints Hit Count对话框。

This setting determines how the breakpoint should behave when it is hit. You can choose to:
· Break always, regardless of hit count. This is the default option. This option has the least effect on program performance, since the debugger does not actually bother to compare the values.
· Break when the hit count is equal to the counter.
· Break when the hit count is a multiple of the counter.
· Break when the hit count is greater than or equal to the counter.
If you choose any option other than the default, an edit box appears next to the When the
breakpoint is hit list control. Edit the value in this edit box to set the hit count value. For
example, you might choose break when hit count is equal to and enter 12. This causes
execution to stop the 12th time the breakpoint is hit, not on any other hit.

Current hit count

This value shows the number of times the breakpoint has been hit. The debugger keeps track of this value, if you have chosen a setting other than the break always default for When the breakpoint is hit. You can open the Breakpoint Properties dialog box and choose Hit Count to view
the current hit count while your program is executing. If you want to break every time the breakpoint is hit, but you also want to keep track
of the hit count in the dialog box, choose break when the hit count is a multiple of and set the count to 1.

Reset hit count

This button resets the value shown for the Current hit count to 0.

上面是MSDN给出的关于Breakpoint Hit Count对话框的内容,主要是介绍程序在循 环中何时暂停。单击Breakpoint Properties对话框中的Condition...按钮弹出 Breakpoint Condition对话框,这是用来给断点设置一个特定的条件,例如当变量 等于某值的时候断点才会起作用,也可以指定变量值发生改变时激活断点。

(3).命令窗口(Command Window)

利用命令窗口,可以查询并设置变量的值来控制程序的执行和输出,也可以在命令窗口中编写很多小的代码段来改变程序的输出。当程序处于中断模式时,命令窗口只允许输入代码。要想查询某个变量的值,用问号(?)加变量名的方式,然后按回车查看结果。改变变量的值,在变量名后面加等号(=)后面是你想输入的具体值。

(4).监视窗口(WatchWindow)

监视窗口可以让你在执行代码时监视变量和表达式。添加或删除变量或表达式,要利用QuickWatch,就是那个类似眼睛的图标。打开QuickWatch后开始Expression下拉列表框是空的,我们可以选择输入一个变量或表达式。在你继续调试程序时,变量或表达式会在WatchWindow中显示出来,当监视窗口中变量的值变成红色时,该值就是刚发生了改变。你还可以手动改变该值,只要在监视窗口中的Value栏输入新的值就行了。

(5).局部窗口(Locals)

它和监视窗口有些相似,它所显示的是当前函数或过程执行中的所有变量和对象。局部窗口也可以让你改变变量或对象的值,所要遵循的规则与使用监视窗口的规则是一样的。局部窗口要想监视一两个变量或表达式就不是那么有用了,这是用监视窗口比较好。

Visual Basic.NET中的错误处理。

在Visual Basic.NET中,错误机制是基于异常这个概念的,异常可被“抛出”以引发错误,并且在处理错误是可捕捉异常。如果没有提供任何类型的错误处理,当错误发生时,用户会接受到关于这个未处理的异常的消息,这个消息是由CLR提供的,这个消息不是用户友好的,用户不能理解。

Visual Studio.NET提供了在所有语言中都通用的结构化错误处理语句。Visual Studio.NET中的结构化错误处理是用Try...Catch...
Finally块来处理的。在Try块中执行可能引发异常的代码,在Catch块中处理错误,Finally块总是在最后被执行,一般将清除代码,例如关闭文件或者释放对象。如果发生了一个不是在Catch块中处理的错误,CLR就会显示出它的标准错误消息并终止程序。

下面我们来看看Try...Catch...Finally块的语法结构。

Try
trystatements
Catch exception As type When expression
catchstatements
Exit Try
Finally
finallystatements
End Try

Trystatements变元

用来指定将要执行的可能引起错误的语句。
Exception变元 是任何变量的名称,它会包含抛出错误的值
可选的type变元 指定异常所属的类过滤器类型。如果没有提供这个变元,Catch语句就会处理定义在System.Exception类中的任何异常。利用这个变元可以让你指定你所要查找的异常的类型,比如IOException。
Expression变元 是用来描述一个普通过滤器的任意表达式,这个过滤器通常用以过滤指定的错误编号。表达式应该返回一个布尔值,只有当值为True是才会处理这个异常。这在你想过滤用以处理指定错误的异常是非常有用。
Catchstatements变元 是处理已发生错误的语句。
Exit Try语句 用于脱离错误处理结构,并在End Try语句后继续执行代码。Exit Try语句只能在你不想执行Finally块内的代码时使用。
Finallystatements变元 是在上面的处理都已发生后所执行的语句。
你可以设置多个Catch块,这样利用多个Catch块和同一个Try块联系,可以检测多个错误。

下面是一个错误处理的例子:

Function GetStringsFromFile(ByVal FileName As String) As Collection

Dim Strings As New Collection

Dim Stream As System.IO.StreamReader = System.IO.File.OpenText(FileName) 'Open the file.

Try

While True ' Loop terminates with an EndOfStreamException

' error when end of stream is reached.

Strings.Add(Stream.ReadLine())

End While

Catch eos As System.IO.EndOfStreamException

' No action is necessary; end of stream has been reached.

Catch IOExcep As System.IO.IOException

' Some kind of error occurred. Report error and clear collection.

MsgBox(IOExcep.Message)

Strings = Nothing

Finally

Stream.Close() ' Close the file.

End Try

Return Strings

End Function

捕捉在读取文件时可能出现的I/O流错误。

上面是Visual Studio.NET中关于错误调试和处理的一些浅显的知识,你对发生的错误类型越熟悉,就能编写出更复杂更有效的错误处理程序,多写积累经验是最重要的

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章: 没有了

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • VB.NET编程调用讯雷下载文件

  • VB.net常用函数

  • 在vb.net中如何判断字段为nu…

  • VB.NET 入门教程

  • .NET环境下水晶报表使用

  • fffff

  • VB.net 调用自己封装起来的用…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |