VB程序的调试技术及应用实例研究
2016-02-06陈晓红沈东华
陈晓红,沈东华
(1.南通大学 计算机科学与技术学院,江苏 南通 226019;2.南通市公安局 港闸分局,江苏 南通 226000)
VB程序的调试技术及应用实例研究
陈晓红1,沈东华2
(1.南通大学 计算机科学与技术学院,江苏 南通 226019;2.南通市公安局 港闸分局,江苏 南通 226000)
在编写程序的过程中,出现错误在所难免。文章介绍了如何根据VB的错误类型,准确地发现并排除错误。最后,结合调试工具,文章分析了如何更好地对应用实例进行调试。
错误类型;调试工具;调试窗口
“高级语言程序设计VB”是非计算机类理工科本科生的基础必修课。学生一般需要在一个学期内掌握VB的基本理论知识,学会编写简单的程序,并需要通过全国或省级计算机等级考试(二级VB)。
学好这门课的关键在于多上机实践,多编写程序。在编程过程中,代码中存在错误是在所难免的。这些错误可能会阻碍程序的正常运行,有些可能不影响程序的运行却得不到正确的结果。有些学生上机遇到错误,就一筹莫展了,对VB的学习也失去了信心,主要原因在于没有学会VB调试技术。遵循VB的调试技术,可以跟踪到程序内部,观察程序的运行过程,观察变量和属性是如何随着语句的执行而改变,从而发现并排除程序中的错误。
1 VB 错误类型
编程时遇到的错误五花八门,为了更有效地运用调试手段排除错误,文章把遇到的错误分为以下3类。
1.1 编译错误
编译错误是由于违背了VB的语法规则,错误地书写语句而造成的。例如,拼错了某个关键字,表达式书写不完整,英文标点符号错用为中文标点符号,If语句没有end if语句与之相对应等。
在编译程序时,VB系统能够进行“自动语法检测”,逐一发现程序中的语法错误,并弹出对话框,给出“编译错误”的提示,以方便对出错行进行修改。
1.2 运行错误
运行错误是指在程序运行过程中,执行非法语句而引发的错误。例如,数组下标越界、数据溢出、类型不匹配、无效属性值、除数为零等。
这类错误在编写形式上符合语法规则,所以不会在编译时被发现。在程序运行时,系统一旦检测到运行错误,就会显示出相应的错误信息,等待编程人员修改。
1.3 逻辑错误
如果程序在编译和运行时均未发现错误,却没有得到预期的运行结果,那么,程序发生了逻辑错误。对于这类错误,VB系统通常无法自动检测,也不会给出错误提示,需要借助调试工具,分析程序的运行过程才能排查出来,加以改正。
2 VB调试工具
2.1 断点设置
程序中的语句都可以设置为断点,在一段程序中可以设置多个断点。设置断点的方法是:将光标移至需设置断点的程序行,按下F9键。
程序运行到断点语句处将暂停,进入中断状态,这时可以查看程序运行到此处的运行状态,查看变量和属性的值,和预期的目标值相比较,可以判断这一部分程序的执行是否符合用户的意图。
2.2 单步调试
单步调试就是以“逐语句”的方式执行程序。单步调试的方法:在程序的设计态或运行态按下F8键。
每执行一次单步调试,程序的执行就向前推进一步,就中断一次,因此,可以逐个语句地检查每个语句的执行状态,特别是遇到选择或循环语句时,便于检测这些语句中的条件判断结果,便于发现程序中存在的逻辑错误。
2.3 调试窗口
调试工作的目标十分明确,就是跟踪程序的执行过程,在中断状态下通过调试窗口来查看变量和属性的值,以达到迅速发现错误位置的目的。VB中提供了以下几种调试窗口。
2.3.1 本地窗口
在程序中断时,本地窗口可以自动显示当前过程中过程级变量的值以及当前模块中模块级对象、变量的值。
在本地窗口中,允许修改变量的当前值。这一技巧的使用,有时能提高调试的工作效率。例如,在if语句中,可以修改变量使之满足判断条件,调试then语句块程序;然后,再修改变量使之不满足判断条件,调试else语句块程序。
2.3.2 立即窗口
在程序中断时,在立即窗口输入变量名或表达式,并按Enter键,就可以查看其当前值。本地窗口中无法查看的全局变量和表达式的值,在立即窗口中也能查看。但立即窗口查看变量或表达式时,每次都需要手动输入,比起其他两种调试窗口,略显不便。
2.3.3 监视窗口
在使用监视窗口前,首先要添加需要监视的表达式。在设计时,和程序中断时,都可以进行添加。在中断时,使用监视窗口,可以一目了然地监测到指定的表达式的值、数据类型、所属过程或模块。监视窗口的优点在于,可以在一个界面上显示所有过程中需监测的表达式值;而本地窗口主要显示的是当前过程中的变量值。
3 调试实例
本文选取了江苏省计算机等级考试(二级VB)的一条改错真题,来详细介绍调试工具的使用。
题目如下:找到介于300~900之间的由3个不同数字组成的完全平方数。所谓完全平方数是指其平方根为整数的数。例如,324的各位数字不同,且平方根是18,所以324是符合要求的数。程序界面如图1所示。
图1 程序运行界面
拿到改错题,首先要泛读并分析一下,本程序中的pf ()函数过程用于判断平方根是否为整数,vf()函数过程用于判断是否由不同数字组成。而Command1_Click()事件过程用于输出在指定范围内符合要求的数。然后,进入调试改错。需要注意的是,在调试时,可能会删除或者覆盖掉部分必要的代码,所以在调试前应该先将程序备份。
首先,单击Command1,此时程序出现运行错误:溢出。究竟在何处产生“溢出”呢?需要深入到程序内部监测。选择“单步调试”,配合“监视窗口”的方法进行调试。选择Command1_Click()中的变量i,p,pf()过程中的变量n,vf()过程中的变量n,k,a(k),a(i),a(j)进行监测。
开始单步运行前,可以使Command1_Click()中循环变量i的初值设置为符合条件的数324,来监测输入符合的数,在哪一步出错,致使得不到正确的输出。就本题而言,需要发现pf()函数能正确执行,而在vf()函数中无法执行到n<0,所以,修改第一处,将n<0改为n=0。继续单步运行,通过监测窗口,观察变量的变化,发现Command1_Click()中的i和vf()中的n同步变化,而本题中Command1_Click()中的i变量应保留本身的值,所以修改第二处,将vf()过程中的形参n改为按值传递。这样,符合条件的数324,就能得到正确输出。
保存修改后的程序,并将循环变量i恢复为300,然后运行,发现程序能运行,但输出却多了一些不符合要求的值,如400等。再使用技巧,将循环变量i,改为400,监测为何能输出。单步执行到vf()中,发现是因为当两数相等时,未及时退出过程,导致一定会执行到vf=True.。修改第三处,将Exit For改为Exit Function。最后,保存程序并运行,发现此时程序已能正确运行,调试成功。
4 结语
要想学好VB程序调试,需要不断探究和摸索,在调试过程中积累经验。灵活地运用VB程序调试工具,可以快速地发现并排除程序中的错误。
[1]成耀,郑国平,鲁松. 如何让学生掌握VB上机调试之我见[J]. 山东工业技术,2013(12):210.
[2]吴中宁. VB程序调试[J].电脑知识与技术,2007(11):749-751.
[3]宋翔.VB程序对的调试和常见错误的捕获及错误处理方法[J].陕西教育(高教版),2011(7):208,214.
Research on debugging technology of VB program and its application
Chen Xiaohong1, Shen Donghua2
(1.Computer Science and Technology College of Nantong University, Nantong 226019, China; 2.Gangzha Branch of Nantong Public Security Bureau, Nantong 226000, China)
During the process of compiling programs, it is difficult to avoid errors.This article introduces how to find and eliminate errors according to the error types of VB. Finally, how to better debug the program instance combining with the debugging tools is analyzed in this paper.
error type; debugging tools; debugging window
2015年度省第四期“333工程”科研项目资助计划;项目编号:BRA2015116。
陈晓红(1981— ),女,江苏南通,硕士,讲师;研究方向:数据挖掘。