
第九章调试与错误处理 通过本章学习。你应该能够达到知下学习目标: 1,案握程序错误的分类 2.拿W0 nErrorResumeNext语句、0 nErrorGoTo语句、nErrorGoTo0语句的f作用。 3,理解设计错误处理程序的三个步蛋 4,理解常用的调试技巧 5,记住F8建、F9量、Ctr1+P8键,Ctrl+f9键的用法, 1。程序情溪的分类 程序中的错误大体可分为三类:即编译错误、实时错误和逐辑错误。 编译错误多数是因为不正确的代码产生的,即在编写程序时书写了错误的语法,从而导 致B编译器无法正确解释源代码而产生的错误,因此也称为语法错误, 实到错误是指应用程序运行期间,一条语句试图执行一条不可能执行的操作面产生的错 误,也称为运行时错误。 逻辑错误是指程序的运行结果和程序黄的设想有出入时产生的错误,这类错误并不直接 导政程序在编译期何和运行期间出现情误,较难发现。 2。程序中逻辑错误的特点 逐辑错误的特点是:源程序在语法上没有问愿,也没有出现无效操作等类型的运行错误, 但是程序未按预期方式执行,产生了不正确的运行结果,泛辑错误只能通过对程序运行结果 进行分析才修被发现, 2,R8u和R8u■N和xt语句之间的区别 在排误处理中,RsU语句的作用是:站束错误处理,并重新执行产生错误的语句, 而ResuneNext语句的作用是:结束错误处理,并重新执行产生错误的语句的下一条语句:
第九章调试与错误处理 通过本章学习,你应该能够达到如下学习目标: 1.掌握程序错误的分类 2.掌握 OnErrorResumeNext 语句、OnErrorGoTo 语句、OnErrorGoTo0 语句的作用。 3.理解设计错误处理程序的三个步骤 4.理解常用的调试技巧 5.记住 F8 建、F9 键、Ctrl+F8 键、Ctrl+F9 键的用法。 1。程序错误的分类 程序中的错误大体可分为三类:即编译错误、实时错误和逻辑错误。 编译错误多数是因为不正确的代码产生的,即在编写程序时书写了错误的语法,从而导 致 VB 编译器无法正确解释源代码而产生的错误,因此也称为语法错误。 实时错误是指应用程序运行期间,一条语句试图执行一条不可能执行的操作而产生的错 误,也称为运行时错误。 逻辑错误是指程序的运行结果和程序员的设想有出入时产生的错误。这类错误并不直接 导致程序在编译期间和运行期间出现错误,较难发现。 2。程序中逻辑错误的特点 逻辑错误的特点是:源程序在语法上没有问题,也没有出现无效操作等类型的运行错误, 但是程序未按预期方式执行,产生了不正确的运行结果。逻辑错误只能通过对程序运行结果 进行分析才能被发现。 2。Resume 和 ResumeNext 语句之间的区别 在错误处理中,Resume 语句的作用是:结束错误处理,并重新执行产生错误的语句。 而 ResumeNext 语句的作用是:结束错误处理,并重新执行产生错误的语句的下一条语句

3,0 nError ResureNert句、0 nErrorGoTo语句、0 nErrorGoTo0W句的作用 OnErrorResuneNext语句的作用是:当发生错误时,B程序将忽略引发错误的语句,并 鞋铁执行下一条语句。 0 rrorGoTo行标识符语句的作用是:当发生错误时,使用该语句街制改变程序的执行 方向。 OnErrorGoto0语句的作用是:用于关周情误辅获机制: 4。设计情误处理程序的步漂 设计情误处理程序一般需煲三个步露: 1.辅获错误,并强制程序珠转 2编写错误处理程序,对所有可预见的情误作出反应 3划出错误处理程序 有关详细内容请见数材第244真。 5,常用程序调试教巧 调试程序是一件夏杂的工程,不但要求程序员对系统设计结果非常熟悉,思溶清晰,更 需要不断地在实践中积累经验:以下技巧可供参考: 1,事先做好备份 2分离受怀疑的程序 3缩小搜素范围 4.使用sgo语句 有关详细内容请见教材第221真。 6。常见错洪信息举例
3。OnErrorResumeNext 语句、OnErrorGoTo 语句、OnErrorGoTo0 语句的作用 OnErrorResumeNext 语句的作用是:当发生错误时,VB 程序将忽略引发错误的语句,并 继续执行下一条语句。 OnErrorGoTo 行标识符语句的作用是:当发生错误时,使用该语句强制改变程序的执行 方向。 OnErrorGoto0 语句的作用是:用于关闭错误捕获机制。 4。设计错误处理程序的步骤 设计错误处理程序一般需要三个步骤: 1.捕获错误,并强制程序跳转 2.编写错误处理程序,对所有可预见的错误作出反应 3.退出错误处理程序 有关详细内容请见教材第 244 页。 5。常用程序调试技巧 调试程序是一件复杂的工程,不但要求程序员对系统设计结果非常熟悉,思路清晰,更 需要不断地在实践中积累经验。以下技巧可供参考: 1.事先做好备份 2.分离受怀疑的程序 3.缩小搜索范围 4.使用 MsgBox 语句 有关详细内容请见教材第 221 页。 6。常见错误信息举例

常见输评情误 错误信息 举例 错误原因 缺少:语句结 如程序代码 错误源因:F0r关键字和1之间没有分隔符,B将F0 束 Fori"lTol0 理解为一个变量将下ri-】作为一个赋值语句来使用。 如程序代码: 错误原因:x3作为一个完整的语句应该结束,两个赋值 1=3y=24 语句中间缺少冒号和分写在两行。 缺少:函数或如程序代码:2十 储误原因:过程调用不应该出现在表达式中,过程调用 变量 y5b5,7) 应作为独立的命令, 1f块缺少 使用块1F语句时. 块If语句必须要有配对的EdlF语句,对于嵌入式 EndIf 缺少配对的EndIf If-EndIf语句而言,必须确保每个封闭的If-Edf 语句 结构中,应有配对的If-Endf结构 子程序域函 Su山或Function过程必策先定又,然后才能调用。如果 数未定义 己经定义,国仍出现该错误,可能是过程名称拼错。另 外,在模块中声明为Private的过程不俺被模块外都的 过程调用。 For没有 每一个Far语句必须有配对的ext,反之亦然: Next或ext 没有For 常见实时情误 错误信息 率例 错误原因 溢出(错误 DimxAsIong 两个数相乘的结果超过了整数的范 6) 围。 x=2000*365 类型不匹 x”128a” 可将整个字符审视为整型 配(错误 13) 文件慎式 将Print语句使用在非OutPut或Append文件的处理方式,必须与打开的文件 错误(错误访何方式所打开的文件上,或将I陶中 的颅式一致。 54) 语句或LineInp四t#语句使用在非Input 访问横式所打开的文件上,就会等致此类 错误。 无效属性 Tier挖件的Interval属性的取值超出 给属性赋予了一个不适当的值 值(错误 了0到6535之间。 380) 需要对象 在引用对象属性时,未指定对象名。 在窗体模块中引用窗体对象属性时
常见编译错误 错误信息 举例 错误原因 缺少:语句结 束 如程序代码: Fori=1To10 错误原因:For 关键字和 i 之间没有分隔符,VB 将 For 理解为一个变量将 Fori=1 作为一个赋值语句来使用。 如程序代码: x=3y=24 错误原因:x=3 作为一个完整的语句应该结束,两个赋值 语句中间缺少冒号和分写在两行。 缺少:函数或 变量 如程序代码:x=2+ MySub(5,7) 错误原因:过程调用不应该出现在表达式中,过程调用 应作为独立的命令。 If 块缺少 EndIf 使用块 If 语句时。 缺少配对的 EndIf 语句 块 If 语句必须要有配对的 EndIf 语句。对于嵌入式 If…EndIf 语句而言,必须确保每个封闭的 If…EndIf 结构中,应有配对的 If…EndIf 结构 子程序或函 数未定义 Sub 或 Function 过程必须先定义,然后才能调用。如果 已经定义,但仍出现该错误,可能是过程名称拼错。另 外,在模块中声明为 Private 的过程不能被模块外部的 过程调用。 For 没有 Next 或 Next 没有 For 每一个 For 语句必须有配对的 Next,反之亦然。 常见实时错误 错误信息 举例 错误原因 溢出(错误 6) DimxAsIong x=2000*365 两个数相乘的结果超过了整数的范 围。 类型不匹 配(错误 13) x%="123a" 可将整个字符串视为整型 文件模式 错误(错误 54) 将 Print 语句使用在非 OutPut 或 Append 访问方式所打开的文件上,或将 Input# 语句或 LineInput#语句使用在非 Input 访问模式所打开的文件上,就会导致此类 错误。 文件的处理方式,必须与打开的文件 的模式一致。 无效属性 值(错误 380) Timer 控件的 Interval 属性的取值超出 了 0 到 65535 之间。 给属性赋予了一个不适当的值 需要对象 在引用对象属性时,未指定对象名。 在窗体模块中引用窗体对象属性时

(错误 可以省略对象名,但引用其它对象的 24) 属性时则必须指定对象名。在标准模 块中引用窗体属性时也必领指定窗 体名。 未找到方 Forml.Clear 窗体不支持Clear方法,Text1,Test 法和数据 拼写错。该错误是由于对象不支持指 成员(错说Textl..Test 定的方法,或不包含所引用的成员, 61) 暖是因为方法名拼写错误。 属性数组 ListBox的List属性数组的索引值小子0L1st属性数组的素引值应在0到 索引无效 (错误 32767之间。小于0为无效属性数相 381) 索引。 第10章COM和ActiveX应用 O则是Component0 bjectModel的缩写,称为组件对象模型域都件对象模型,是Microsoft 公可许多载件的基础。在iCr0soft公可的MSN中是这样定复的:“0W是款件组件互相 通识的一种方式,它是一种二进制和网格标准,允许任意两个组件互相通讯,而不管它们是 在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要 该操作系统支持C训),也不管该组件是用什么语言编写的。” ctiveX是遵循C咖规程的,或者说是COM理论的具体化因此,ctiveX和CM的关 系可以简单描述如下:ctiveX是建立在O国基础上的,它深用简化之日的0国E技术《对象 鲑接与嵌入),并使CE随时处于激活(Active)状态,以处理信息, ctiveX控件是ActiveX模型的一种,它可以通过VB集成环境的"工程一部作”菜单, 将ActiveX控件加到工具箱中。这种慢作在前面的章节中我们已多次接触。 可辐入对象也是一种ct1veX控件。只是插入的对象本身是一个应用程序。 了解本章内容,本章不作考试要求
(错误 424) 可以省略对象名,但引用其它对象的 属性时则必须指定对象名。在标准模 块中引用窗体属性时也必须指定窗 体名。 未找到方 法和数据 成员(错误 461) Form1.Clear Text1.Test 窗体不支持 Clear 方法,Text1.Test 拼写错。该错误是由于对象不支持指 定的方法,或不包含所引用的成员, 或是因为方法名拼写错误。 属性数组 索引无效 (错误 381) ListBox 的 List 属性数组的索引值小于 0 List 属性数组的索引值应在 0 到 32767 之间,小于 0 为无效属性数组 索引。 第 10 章 COM 和 ActiveX 应用 COM是ComponentObjectModel的缩写,称为组件对象模型或部件对象模型,是Microsoft 公司许多软件的基础。在 Microsoft 公司的 MSDN 中是这样定义的:“COM 是软件组件互相 通讯的一种方式,它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是 在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要 该操作系统支持 COM),也不管该组件是用什么语言编写的。” ActiveX 是遵循 COM 规程的,或者说是 COM 理论的具体化。因此,ActiveX 和 COM 的关 系可以简单描述如下:ActiveX 是建立在 COM 基础上的,它采用简化之后的 OLE 技术(对象 链接与嵌入),并使 OLE 随时处于激活(Active)状态,以处理信息。 ActiveX 控件是 ActiveX 模型的一种,它可以通过 VB 集成环境的“工程-部件”菜单, 将 ActiveX 控件加到工具箱中。这种操作在前面的章节中我们已多次接触。 可插入对象也是一种 ActiveX 控件,只是插入的对象本身是一个应用程序。 了解本章内容,本章不作考试要求