【VB开源代码栏目提醒】:网学会员鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“VB程序错误处理方法小结 - 操作系统”一文,供大家参考学习
VB程序错误处理方法小结 大家知道即使程序员抱有最好的愿望而且计划工作做得非常周密也无法避免
代码出现错误。
实际上可能出现的程序错误是很多的但是它们基本上可以分为两种类型一种是编译错误另一种是运行期错误。
编译错误是指使得Visual Bacsic下面简称
VB的编译器无法对
代码进行编译的错误。
如果一个过程中包含了编译错误
VB将不执行该过程并且我们也不能向用户提供带有编译错误的运行期版本应用程序大多数编译错误是句法错误造成的。
一、
VB的编译选项
VB有两个柚孟罨嵩诤艽蟪潭壬嫌跋煳颐谴唇ǚ浅崾档拇氲哪芰Α桓錾柚孟钍荂ompile On Demand按需要进行编译另一个设置项是Background Compile后台编译。
可以打开Options对话框选定General选项卡然后对这两个设置项进行设置如下图1所示。
当选定Compile On Demand时如果单击工具栏上的Run按钮或者按F5键
VB并不全面编译我们的项目。
相反只在引用过程时才对这些过程进行编译。
使用Compile On Demand通常可使比较大的项目或者速度较慢的
计算机上的项目能够更快地启动运行但是它也会产生某些不被注意的编译错误。
在发现和纠正所有编译错误之前不能将项目编译成.exe或.dll之类的可发布文件因此选定Compile On Demand并不能够发布带有编译错误的
代码。
但是选定Compile On Demand后会导致编译错误随着时间的推移而不断增加从而在最后试图进行全面编译时迫使我们对
代码进行大量的纠错。
如果在IDE中调试项目
VB常常必须停止不只是暂停运行以便进行纠错操作。
这使得调试正在运行的项目时对大量编译错误的纠正操作变得非常麻烦。
如果能够在合理的时间内全面编译项目那么可以考虑关闭Compile On Demand。
也可以使Compile On Demand保持选定状态但是要定期按CtrlF5键以便重新运行我们的项目。
这使我们在编程时能够定期纠正编译错误而不必一次性纠正大量的编译错误。
图1 编译时选中Compile On Demand和Background Compile两个选项 二、Err对象 在能够编写有效的错误处理
代码之前我们必须了解
VB的Err对象这是个运行期对象它包含了关于最新错误的信息。
当程序运行时遇到一个错误或者当我们使用Err对象的Raise方法故意引发一个错误时便形成Err对象的属性。
当遇到On Error语句比如On Error Resume Next并且在使用Exit Sub、Exit Function或Exit Property语句退出一个过程后Error对象的属性值就被清除。
若要显式清除Err对象可以调用它的Clear方法。
下表1列出了Err对象的属性。
属性 说明 Number 用于标识该错误的专用号码 Source 当前
VB项目的名字 Description 表义性的错误消息。
如果某个错误没有这个字符串本属性就会指明应用程序定义的错误或对象定义的错误 HelpFile 与错误相关的
VB 帮助文件所在的驱动器、路径和文件名 HelpContext
VB 帮助文件用于该错误的上下文ID LastDLLError 在32位Microsoft Windows操作系统上上次调用动态链接库DLL的系统错误
代码。
LastDllError属性是只读属性 说明Number用于标识该错误的专用号码Source当前
VB项目的名字Description表义性的错误消息。
如果某个错误没有这个字符串本属性就会指明应用程序定义的错误或对象定义的错误HelpFile与错误相关的
VB 帮助文件所在的驱动器、路径和文件名HelpContextVB 帮助文件用于该错误的上下文IDLastDLLError在32位Microsoft Windows操作系统上上次调用动态链接库DLL的系统错误
代码。
LastDllError属性是只读属性 三、错误处理程序的类型 将一个项目当作已经编译的程序运行时未捕获的错误会造成致命的后果它们会导致程序终止运行。
必须尽一切努力防止发生这种情况。
若要防止
代码中的错误中断
代码的运行并终止已编译程序的运行我们可以创建错误处理程序以捕获
代码中的错误。
当捕获一个错误后
VB并不显示出错消息也不终止
代码的运行。
相反我们编写的专门用来处理错误的
代码则开始运行。
每个过程都应该拥有错误处理程序而不管它包含多大的
代码量。
最好在
代码中放入一个On Error语句作为
代码的第一行放在紧靠过程标题的后面和变量说明的前面。
如果一个过程的错误能够以这种方式出现就应该在过程的开头用突出的注释来明确说明这一行为特性。
若要捕获错误基本上可以使用下面两种方法 当出现错误时使用On Error GoTo转移到别的
代码上去执行。
使用On Error Resume Next语句不中断
代码的执行也不转移到别的
代码上去执行而是忽略该错误。
可以在一个过程中创建多个错误处理程序但每次只能激活一个错误处理程序。
VB将最新的On Error语句中指明的处理程序视为已经激活的错误处理程序。
切换一个过程中的不同位置上的错误处理
程序往往是很有好处的理解各个错误处理程序如何运行是利用这一功能的关键。
1、使用On Error Resume Next以忽略错误 对错误进行处理的最简单和最危险的方法是使用On Error Resume Next语句。
On Error Resume Next语句规定
代码中的错误将完全被忽略存在错误的
代码行被跳过然后继续执行下一个语句。
例如下面这个过程存在一个运行期错误即一个被0除的错误它由On Error Resume Next错误处理程序来处理 Private Sub cmdGenerateError_Click Purpose: Test On Error Resume Next On Error Resume Next Debug.Print 10 / 0 End Sub Debug.print语句产生了一个被0除的错误。
但是由于存在一个已经激活的错误处理程序由On Error Resume Next指定因此该错误被忽略并在下一个语句即End Sub语句上恢复执行。
错误被忽略并不意味着我们无法知道错误已经发生。
当一个语句产生了一个错误之后尽管没有显示出错消息Err对象仍然包含关于该错误的信息。
2、使用On Error GoTo转移执行的
代码流 除非我们捕获了一个意料之外的错误比如上面
代码中的那种错误否则忽略
代码中的错误是非常危险的并且是一种不得已时采用的办法。
当一个过程中出现了意料之外的错误时该过程就会产生许多问题。
如果忽略该错误就会对用户产生严重的影响比如数据没有保存或者保存不正确。
许多情况下当出现
代码错误时必须执行某些操作将
代码的执行转移到On Error GoTo语句中指定的错误处理程序。
该语句的句法如下 On Error GoTo line 请注意line必须是指与On Error GoTo语句相同的过程中的一个语句。
在这个句法中 line有两个意思。
首先它是指出现错误时要转移到的这个
代码行号。
不过这个行号并不是过程中的
代码行的物理位置。
请看下面这个
代码例子 Private Sub TestErrorHandler Purpose : Test the On Error GoTo statement by deliberately generating a run-timeerror. On Error GoTo 4 Debug.Print Line 2 Debug.Print 10 / 0 Debug.Print Line 4 Debug.Print Line 5 End Sub 我们可能认为被0除的错误会导致
代码在输出文本line 4这个语句上继续执行因为这是
代码的第四个语句不是计数注释。
不仅这种情况不会发生而且该
代码实际上会导致产生一个编译错误并且
代码根本不会执行。
3、用调试方式激活错误处理程序和取消其激活状态 虽然我们不希望已编译程序中的错误不被捕获但是当程序在IDE中运行时如果出现错误让
VB中止
代码的执行这样做常常是非常不利的。
当
代码的执行中止时会看到一条相关的出错消息并告诉我们出现错误的
代码行这对于
代码的调试来说是大有帮助的。
VB为处理
代码设计时遇到的错误而使用的方法取决于
VB IDE的Error Trapping捕获错误属性。
Error Trapping属性是
VB环境的一个属性不是某个项目的属性。
我们操作的每个项目即使在关闭和重新启动
VB之后均使用该设置值。
若要为
VB的当前会话设置Error Trapping选项而不必为将来的会话修改默认值请使用
代码窗口的快捷菜单上的Toggle命令见图2。
图2 从任何
代码窗口的快捷菜单中选择Toggle命令 可以将Error Trapping属性设置为下列值中的一个 Break On All Errors在所有错误上中止。
Break In Class Module在类模块中中止。
Break On Unhandled Errors在未处理的错误上中止。
Break On All Errors实际上可使所有错误处理程序均取消激活状态。
当出现一个错误时无论是否激活了处理程序
代码均在出错的语句上进入中止方式同时
VB显示一条出错消息。
这使我们能够在IDE进行测试时处理意料不到的错误。
可以说几乎所有的电脑都进行了一定的自动、手工优化很多个人用户还安装运行了一些优化硬件的软件。
而在很多媒体也发表了此类优化文章笔者也发表过一些。
不过笔者的一些朋友和网友对系统优化已经不再感兴趣了——多是说优化前和优化后都差不多对速度和稳定性的提高没有什么效果真的是这样吗以笔者的感觉来讲其答案是肯定的…… 不过在这几个月中笔者对硬件和操作系统的工作原理进行了更深一层的研究和
学习后陆陆续续地发现优化中有很多重要环节被我们忽视了。
经反复实践对比后发现这些环节对优化效果起这决定性的作用总结起来大体上有九个环节下面笔者就逐一道来。
一、合理使用硬盘 何为合理使用硬盘呢首先我们要了解硬盘盘片的物理结构。
分区并格式化后的硬盘却是以扇区为基本单位的一个分区是由若干个扇区构成的。
那什么是扇区呢我们都知道磁盘在工作时是转动的它所存储的信息是按一系列同心圆记录在其表面上的每一个同心圆称为一个磁道在图1我们可以看到磁道和扇区的分布情况当然这只是个示意图而已实物要比图中密得多很多朋友认为那个红色的“大块头”是一个扇区但正确的认识应该是黄色的那小块为一个扇区。
一个扇区的大小为512字节一个整圆环为一个磁道一个磁道上有若干个扇区所以我们不难看出越靠外的磁道上的单个扇区其体积越大换句话就是其密度越小由于硬盘是机械传动所以磁头对其的寻找、读、写速度也就越快分区的分布也是从外圈向内圈的所以C盘相对于D盘等要靠外这就是为什么我们感觉C盘比D、E等分区要快的原因。
明白了上面的知识我们就能合理使用硬盘了以一块容量为60GB的新硬盘为例进行说明:把C盘分为3至5GB视操作系统而定把D盘调成1GB把E盘设为10GB省下的就看着设吧可对半分为F和G盘——对系统速度没有什么影响。
分好区后如何使用是最为关键的: 1、把操作系统装在C盘上并把MwIE、Foxmail、ICQ、QQ、FlashGet、超级兔子、播放器软件以及一些看图软件等常用小型软件也安装在C盘上。
如果您使用诸如Office之类的微软大型软件的话也要将其安装到C盘上。
当然由于我们并不会用到其中的全部功能所以要定制安装那些有用的部分以节省C盘空间然后把虚拟内存设置到D盘上只是暂时的_后再使用系统自带的磁盘碎片整理程序把C盘整理一下。
2、使用“微晓
注册表优化大师”之类的系统修改软件把“我的
文档”、“上网缓冲”、“上网历史”、“收藏夹”等经常要进行写、删操作的文件夹设置到D盘上来尽量避免其它分区产生磁盘碎片而降低硬盘性能 3、把各种应用软件安装到E盘至于游戏可装在F盘G盘用来存放影音文件。
4、对C盘再进行一次碎片整理然后进行完下面的第二大步后再把虚拟内存设置到C盘上 二、虚拟内存的设置 将虚拟内存设置成固定值已经是个普遍“真理”了而且这样做是十分正确的但绝大多数人都是将其设置到C盘以外的非系统所在分区上而且其值多为物理内存的23倍。
多数人都认为这个值越大系统的性能越好、运行速度越快但事实并非如此因为系统比较依赖于虚拟内存——如果虚拟内存较大
系统会在物理内存还有很多空闲空间时就开始使用虚拟内存了那些已经用不到的东东却还滞留在物理内存中这就必然导致内存性能的下降 于是笔者从32MB内存开始试起至512MB内存为止发现上面的说到的事实是非常正确的虚拟内存应设置为物理内存0至1.5倍0倍是多少啊就是禁用_为好而且物理内存越大这个倍数就应越小而不是越大。
当物理内存等于或大于512MB时绝大多数PC就可以禁用虚拟内存不用了这时内存性能是最高的_ 至于您的虚拟内存具体要设置成多大您就要自己试一试了因为这和常驻内存软件的多少和大小以及您平时运行的软件是有直接关系的所以笔者无法给出建议值。
您可先将其设为物理内存等同后再运行几个大型软件如果没有异常情况出现的话您就再将其设置成物理内存的一半后再运行那几个大型软件如果出现了异常您就要适当加大虚拟内存的值了以此类推当您找到最佳值后只要把这个值设置到C盘上就OK了: 注:如果您使用的是Windows ME及以下的操作系统的话可下载“MagnaRAM 97”来优化物理内存和虚拟内存这样的效果更好另外笔者建议您不要再使用那些所谓的优化和整理内存的软件了 三、合理摆放“快捷方式” 绝大多数情况下我们运行软件都是通常该软件的“快捷方式”来做到的硬盘越来越大安装的
软件也越来越多有很多朋友喜欢把快捷方式都放到桌面上这样不但使您眼花缭乱而且系统性能也会下降而且会造成系统资源占用过大而使系统变得不稳定所以我们最好把桌面上的快捷方式控制在10个左右其它的快捷方式可全放到开始菜单和快捷启动栏中而且把所有软件的“卸载”快捷方式删除以提高系统性能。
另外尽量不要存在重复的快捷方式。
四、慎用“安全类”软件 这里所说的安全类软件就是指实时性的防毒软件和防火墙。
该类软件对系统资源和CPU资源的占用是非常大的有的高达30以上如果您不经常上杂七杂八网站的话这类软件完全没有必要使用这比对CPU进行超频可实际、方便得多了 五、减少不必要的随机启动程序 这是一个老生常谈的
问题但很多朋友并不知道什么程序是可以禁止的什么是不能禁止的所以很多人并没有进行这一步的
工作。
有了优化大师这一工作就简单得多了在“开机速度优化”中优化大师会提示您什么可以禁止什么不能禁止 这样做的好处除了能加快启动速度外还能提高系统在运行中的稳定性 六、合理设置“图标缓存” 通常系统默认的图标缓存都是比较大的这明显有浪费的感觉所以我们要将其值做适当的调整我们可用“Windows优化大师”查看一下当前系统已经褂昧硕嗌偻急昊捍妫缓笪颐墙渲瞪栉导蚀笮〉倍左右即可。
注:部分电脑可能无法使用优化大师进行修改这时您可使用“超级兔子魔法设置”进行修改 另外桌面背景也不要弄得太复杂建议设为“无”有的朋友还做成了动画桌面这种做法没有任何现实意义除了会给系统带来不稳定因素外没有任何好的作用——毕竟我们只有很少时间是面对桌面的_ 七、合理设置“磁盘缓存” 系统默认值通常都非常保守所以我们要进行一定的修改我们也可在“Windows优化大师”中对其进行修改只是我们要手工进行数字的输入磁盘缓存最小值可设为2048KB最大值设为物理内存的25缓冲区读写单元为512。
注:这一做法会对多媒体软件的稳定运行带来很大的好处尤其是最小值的设置不要太低 八、尽量精简右键菜单 很多程序在安装后都会在右键菜单中留下身影其中有很多都是我们用不到的但其却给我们的系统带来了负担。
为此我们可在“超级兔子魔法设置”等软件中对右键菜单进行精简通常只保留
常用的就行了另外您最好是将无用项删除而不是只单纯去掉其前面的小勾 这样做可有效减少因“新建”菜单而引起的失去响应的现象出现 九、合适的显示器刷新率和分辨率 有些朋友总是抱怨自己的显卡太差劲有的显卡的确是差劲了些但很多情况下都是因为显示器刷新率设置得过高所致的“假象”。
通常15、17英寸的彩显将刷新率设置成75Hz以上就行了如果带宽足够当然也可以更高没有必要强行上得太高。
分辨率也是同一个道理通常设成800×600或1024×768就行了只要够用就好完全没有必要玩什么“终极”和“骨灰”。
这样做比对显卡进行超频带来的提速效果要大多了 结语: 总而言之当您使用了本文的方法后您就会发现系统比以前快多了而且也稳定多了_除了本文的内容外在进行了一定的优化后再把系统弄得简单点也没有什么坏处。
华而不实没用的请君尝试之便知余言不谬也 在
VB软件开发中 错误信息的捕获及处理是非常重要的部分。
有些错误在编译时即可发现、排除。
但还有一 些错误是在软件运行时由于用户错误的输入等方面的原因而产生的这就需要软件开发者在软件
设计和开发时注意 处理这方面的错误。
VB在捕获及处理错误信息方面有两个重要的函数。
一个是ERROR该函数捕获错误信息。
另 一个是ERR 该函数捕获、返回错误信息
代码。
当捕获到错误信息
代码后软件开发者就可以根据错误
代码来判、决定程序是退出运行exit sub、是继续执行resume next、 还是进行错其他处理goto 语句标号。
VB 还有一个 重要的语句onERROR该语句当
VB程序运行产生错误时触发。
开发者可用该语句结合ERR 和ERROR 函数来该用户提供错误信息、并决定程序下一步工作。
也可作成有用户独自选择下一步工作。
笔者开发了一个捕获、显示错误信息的过程showerror。
发生错误时调用该过程即可下面是过程源
代码及调用例子 Sub showerror Dim s As String Dim crlf As String crlf Chr13 Chr10 s 运行时发生下列错误: crlf 注释add the error string s s Error crlf 注释add the error number s s 错误码为: CStrErr Beep 注释beep and show the error X MsgBox s2 End Sub 调用例子 sub abc onerror goto 1’发生错误时转到 1 .. 程序体 .. exit sub 1 showerror if err… then . . 错误处理部分 . . endif exit sub end sub