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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第八章 程序的调试.docx

1、第八章 程序的调试第八章程序调试程序错误分类VB中常见的程序错误可分为编译错误、运行错误和逻辑错误3类。 1.编译错误 编译错误也称为语法错误,在编写程序时,如果语句不符合Visual Basic的语法规则,就会产生这类错误。例如,输入了不正确的关键字、遗漏了某个必需的标点符号、缺少表达式、类型不匹配或者应该配对的语句没有配对等,都会产生编译错误。 在编写代码或运行程序时,很容易检查出这类错误。在编写代码时,VB会自动对程序进行语法检查,某些类型的语法错误能够被即时检查出来,并且会弹出一个出错消息框,出错的那一行以高亮度显示。例如,当输入“I=”后没有接着输入表达式,而是切换到其他行,则会弹出

2、如图8.1所示的消息框。 还有一些类型的语法错误,在编写代码时VB检查不出来,例如,If语句后没有对应的End If语句、输入了错误的属性名等。在运行程序时,VB将弹出错误消息框,提示用户错误所在,如图8.2所示。2.运行错误 运行错误是程序运行时出现的错误。运行时,如果一个语句无法正常完成自己的功能时,就会出现这类错误。例如,执行除法操作时除数为0,或加载一个图片时文件不存在,都将产生错误。出现运行错误时也会弹出一个消息框,如图8.3所示的是除数为0时弹出的消息框。 运行错误消息框的第一行显示的是运行错误代号,每个运行错误都对应一个代号。第二行显示的是错误的说明。 单击【结束】按钮,则结束程

3、序的运行,返回到设计模式;单击【调试】按钮,则切换到中断模式,显示出【代码】窗口,并且出错的语句以高亮度显示,此时可以编辑代码。单击【帮助】按钮,则打开VB的帮助窗口。其中提供了错误说明、错误代号、引发错误的原因以及解决错误的办法等信息。 3.逻辑错误 有的时候,应用程序的代码完全符合语法要求,运行时也不出现任何错误,但却未出现期望的结果,这表明程序中存在逻辑错误。这类错误是因为代码中存在逻辑上的缺陷而引起的,例如,设置的选择条件不合适、循环次数不当等。逻辑错误最隐蔽,较难发现和排除,程序员的语言功底和编程经验在排除这类错误时很重要。 程序调试就是寻找和排除错误的过程,VB提供了一套交互式的调

4、试工具,程序开发人员可以借助它们来查找出逻辑错误。调试工具栏为了调试程序的方便,用户可以使用VB的调试工其栏。在默认情况下,VB界面上不显示调试工具栏。打开【视图】菜单,指向【工具栏】选项,则弹出【工具栏子菜单,执行其中的【调试】命令即可打开调试工具栏。其中各按钮的功能如表8.1所示。设置断点断点是告诉VB挂起程序执行的一个标记,当程序执行到断点处即暂停程序的执行,进入中断模式,此时可以在【代码】窗口中查看程序内变量、属性的值。在代码中设置断点是常用的一种调试方法。 在VB中,断点的设置有两种办法: (1)将光标放置在需要设置断点的地方,执行【调试】菜单中的【切换断点】命令或单击调试工具栏中的

5、l切换断点l按钮,即可在该行语句上设置一个断点。 (2)设置断点更简便的办法是,直接在要设置断点的行的左边单击鼠标。设置了断点的行将以粗体显示,并且在该行左边显示一个黑色的圆点,作为断点的标记。在代码中可以设置多个断点。 设置完断点后,运行程序,运行到断点处,程序就暂停下来,进入中断模式。这时断点处语句以黄色背景显示,左边还显示一个黄色小箭头,表示这条语句等待运行。把鼠标光标移到各变量处,会显示变量的当前值,如图8.8所示。 只要再对设置有断点的行执行一次设置断点的操作,即可清除该行的断点。在需要设置断点的代码行前面添加一个Stop语句,也能起到断点的作用,在程序运行遇到Stop语句时,就会暂

6、停下来。使用Step语句比设置断点更灵活,例如,可以让某个循环在循环指定次数后停止执行,进入到中断模式。跟踪程序的运行查找程序中的错误所在并不那么容易,有时需要一条语句一条语句地执行或者反复执行某段代码来检查错误所在,这些方法被称为跟踪程序的运行。 1.“逐语句”跟踪 “逐语句”执行代码就是一条语句一条语句地执行代码,每执行一条语句后,就暂停下来,为程序调试者提供分析判断的机会。 进入“逐语句”方式跟踪程序执行的具体办法是执行【调试】菜单中的【逐语句】命令,或单击调试工具栏里的【逐语句】按钮。不过最常用的方法还是使用快捷键F8,每按一次F8键,程序就执行一条语句,调试者可以观察代码的流程和语句

7、的执行情况。 2.“逐过程”跟踪 如果要调试的程序调用别的过程,而被调用过程已经经过了调试,确保能正确执行,那么在调试这个程序时,若使用“逐语句”去跟踪就会在调用时到被调用过程里去一句句地执行,这显然没有必要。这时最好的办法是采用“逐过程”跟踪,把被调用过程当作一条语句处理。如果在事件过程中没有调用其他过程,则“逐过程”跟踪与“逐语句”跟踪相同。 进入“逐过程”方式跟踪程序执行的具体办法是执行【调试】菜单中的【逐过程】命令,或单击调试工具栏里的【逐过程】按钮,也可以使用快捷键Shift+F8。 当使用逐语句跟踪进入被调用过程后。如果从开始的儿条语句就断定出该过程没有问题,可以执行【调试】菜单中

8、的【跳出】命令,从当前的过程中提前跳出,去执行过程调用者的下一条语句。单击调试工具栏中的【跳出】按钮或使用快捷键Ctrl+Shift+F8也可以跳出被调用的过程。 3.运行到光标处 在对程序进行跟踪时,总是要一条语句一条语句地执行,这样有时显得较繁琐。对于不感兴趣的代码部分可以略过,方法是首先将光标插入到需要停止运行的某行语句中,然后执行【调试】菜单中的【运行到光标处】命令,则程序运行到光标处就会中断运行。这时,调试者可以逐语句或逐过程执行后面的代码。【运行到光标处】命令的快捷键是Ctrl+F8。4.设里下一条语句 在前面的调试过程中,尽管可以随时中断程序的执行,但程序还是以正常的流程运行的。

9、例如,按F8键逐语句执行代码时,在代码的左边会有一个黄色的箭头随着移动,该箭头的移动次序就是程序的执行流程。黄色箭头所指向的语句为下一条要执行的语句。如图8.9所示的语句“A=S/6”为下一条要执行的语句。 有的时候,在更改了某变量或属性的值后,希望重新执行代码的某部分来观察更改后的运行结果,这时,可以人为地指定下一条要执行的语句。 指定下一条要执行的语句的方法是:首先将光标插入到要设置为下一条语句的行,然后执行【调式】菜单中的【设置下一条语句】命令,则黄色箭头就会指向光标所在的语句行。此时,运行程序,就会从该行语句开始执行。 设置下一条语句最方便的办法是,将鼠标指针移动到黄色箭头上,然后拖动

10、鼠标将黄色箭头拖动到指定的位置,就达到了设置下一条语句的目的。使用调试窗口在程序调试过程中,对调试者最为重要的信息是:在运行过程中各变量和表达式的值的变化情况。这些信息能够为调试者提供分析依据,从而做出正确的判断。为此,VB提供了三个调试窗口,分别是立即窗口、本地窗口和监视窗口。在逐语句执行代码时,可以通过它们来监视变量或表达式的值。 立即窗口 在程序进入中断模式后,一般会自动弹出立即窗口,如果界面上没有显示出立即窗口,可以执行【视图】菜单中的【立即窗口】命令来打开它。单击调试工具栏中的【立即窗口】按钮也可以打开立即窗口。 通过立即窗口,即可以监视当前过程中各变量或属性的值,还可以重新为变量或

11、属性赋值。 1.通过立即窗口监视 VB把立即窗口看作为一个名称为Debug的对象,Print是它的一个很重要的方法。在程序代码中添加如下语句: Debug.print变量或属性 就能够将变量或属性的值显示在立即窗口中了,从而达到监视变量与属性值的目的。 例如,在计算数组各元素的总和时,在代码中添加一条“Debug.Print S”语句,如图8.11中(a)图所示。运行程序,立即窗口中就会显示出数组元素每次累加的结果,如图8.11中(b)图所示。更灵活的监视变量或属性值的方法是,在程序进入中断模式后,在立即窗口中直接使用Print语句来输出变量或属性的值。例如,将断点设置在语句“A=S/6 ”处

12、,如图8.12中(a)图所示,运行程序,当程序中断后,在立即窗口中输入“Prints”,按回车键,则输出变量S当前的值。同理,也可以输出循环变量i的当前值,如图8.12中(b)图所示。 2.给变量或属性赋值 在中断模式下,利用立即窗口不仅能输出变量或属性的值,还能改变它们的值。在调试程序时,常常使用立即窗口给某变量赋予不同的值,然后配合Print语句的使用就可以观察到该变量值对其他变量值的影响。 例如,在代码中设置两个断点,如图8.13中(a)图所示,运行程序,当程序的运行在第一个断点处停下来时,在立即窗口中输入“S=5”,按回车键;继续运行程序,当程序的运行在第二个断点处停下来时,在立即窗口

13、中输入“PrintS”,按回车键,则输出S的值为26,如图8.13中(b)图所示。可见,变量S的初值变为5,而不在是代码中所赋予的初值0。使用本地窗口利用本地窗口不但可以查看当前过程中的所有变量取值,而且还可以查看该窗体及其上所有控件的属性取值。 在中断模式下,执行【视图】菜单中的【本地窗口】命令,或单击调试工具栏中的【本地窗口】按钮可以打开本地窗口。其中显示了当前过程中所有变量及其取值。 在本地窗口的表达式列表中显示的“Me”是指本窗体,单击其左边的加号节点可以展开它,其中列出了本窗体及其上所有控件的属性取值。 在本地窗口中还可以更改变量与属性的取值,选中某属性或变量,然单击它们的取值,即可

14、更改其值了。 注意:在本地窗口中更改属性的值只是在本次运行时有效,并不是真正改变了对象的属性设置。 在本地窗口最上一栏显示的是当前的过程,单击右边的显示有符号的按钮,可打开【调用堆栈】对话框,如图8.16所示。在调试包含复杂的嵌套过程调用的应用程序时,【调用堆栈】对话框有助于了解过程调用的嵌套关系。在【调用堆栈】对话框中列出了当前过程正在调用的所有其他过程。当前过程位于最底部,它调用的某过程位于其上;该过程调用的另一过程又位于该过程的上面。因此,位于最上面的是最后调用的过程。监视窗口监视窗口用来显示监视表达式的值,在使用该窗口前,需要事先添加要监视的表达式。为监视窗口添加监视表达式的方法有两种

15、: 1.使用【添加监视】对话框。 (1)执行【调试】菜单中的【添加监视】命令,则弹出【添加监视】对话框,在【表达式】框中输入要监视的表达式,例如,要监视变量S的值,可以输入S。 (2)在【上下文】区中选择被监视的表达式所在的过程和模块。 (3)在【监视类型】区中选择一种表达式的监视类型,如果选择【监视表达式】单项按钮,则监视窗口显示表达式的值。如果选择【当监视值为真时中断】单选按钮,则在程序运行中,当表达式的值为真(不为0)时程序就进入到中断模式。如果选择【当监视值改变时中断】单选按钮,则在程序运行中,一旦表达式的值改变,程序就进入到中断模式。 (4)设置各选项,单击【确定】按钮即可为程序添加

16、一个监视表达式。重复上述操作,可以添加多个监视表达式。2.使用【快速监视】对话框。 (1)在【代码】窗口中选定要监视的表达式。 (2)执行【调试】菜单中的【快速监视】命令,或单击调试工具栏中的【快速调试】按钮,打开【快速监视】对话框。 (3)单击添加按钮即可将所选的表达式设置为监视表达式。 在添加了监视表达式后,它们会出现在监视窗口中,如图8.19所示。还可以更改或删除已添加的监视表达式。在监视窗口中选中某表达式,执行【调试】菜单中的【编辑监视】命令,则弹出【编辑监视】对话框,从中可以更改监视表达式及其各项设置,单击【删除】按钮可删除该监视表达式。错误捕捉一个好的应用程序,不仅体现在它的功能强

17、大与容易操作,还体现在它良好完善的错误处理能力。在编写程序时,要充分考虑到程序运行时可能会遇到的错误。例如,在做除法运算时,用户输入的除数可能为O;在执行读取软盘操作时,软驱里可能没有放软盘。 当应用程序在VH环境中运行时,遇到错误将终止程序的运行,返回到VH环境。当应用程序被编译成E文件,在Windows环境中运行时,一旦发生运行错误,Windows将终止应用程序的执行,并将控制权交归还给Windows系统。显然,这种处理错误的方式不是所希望的。一般的应用程序都会在运行时捕捉到错误,并且给出提示,以便让用户采取行动。 在VB中,要增加应用程序的处理错误的能力,需要做以下两步工作: (1)设置

18、错误陷阱 (2)编写错误处理程序 VB提供了On Error语句设置错误陷阱,捕捉错误。On Error语句有3种形式,如表8.2所示。 Resume语句应放置在出错处理程序的最后,以便错误处理完毕后,指定程序下一步做什么。Resume语句也有3种形式,如表8.3所示: 在On Error语句捕捉到错误后,Err对象的Number属性返回错误的代号,通过错误代号即可知道引发错误的原因了。在编写错误处理程序时,一般使用“IfErr.Number=”语句或“select Cage Err.Nurnber”语句来判断错误的类型: VB提供的Error函数用于返回错误信息,其语法如下: Error(错

19、误代号). 例如: Form.Print.Error(11). 语句将在窗体上显示“除数为零”。这里编写一个用于计算两个数相除的小程序。如果用户输入的除数为零,会弹出消息框提示用户;如果没有输入除数或被除数,也会弹出消息框提示用户。 在窗体上放置5个标签控件、3个文本框控件和1个按钮控件。其中各对象的属性设置如表8.4所示。编写程序代码如下 Private Sub Commandl_Click() On Error GoTo WW “ 设置错误陷阱 Text3.Text=Text1.Text / Text2.Text Exit Sub 错误处理代码块 WW: If Err.Number=11 Then “判断错误代号 MsgBox “除数不能为零,请重新输入!“,16.“错误” Else MsgBog“出现其他错误!”,16,“错误” End If Resume NextEnd Sub 运行程序,输入被除数与除数,单击【结果】按钮,就会计算出它们的商。如果输入的除数是0,则弹出如图8.22所示的消息框,要求用户重新输入;如果没有输入被除数或除数,则弹出如图8.23所示的消息框,提示用户出错。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1