资源描述
调调试试程序程序程序调试的主要任务:查找程序的错误和排除错误程序调试的主要任务:查找程序的错误和排除错误主要内容:主要内容:VBVB程序中的错误类型程序中的错误类型程序工作模式程序工作模式程序调试程序调试错误处理错误处理错误的类型:错误的类型:编译错误,逻辑错误和运行错误编译错误,逻辑错误和运行错误1.1.编译错误编译错误 编译错误是指在程序编译过程中出现的错误。通常编译错误是指在程序编译过程中出现的错误。通常是由于不正确书写代码而产生的。是由于不正确书写代码而产生的。例:关键字写错,遗漏标点符号,括号不匹配等,较为容例:关键字写错,遗漏标点符号,括号不匹配等,较为容 易。易。VBVB提供了自动语法检查功能,能指出并显示这些错提供了自动语法检查功能,能指出并显示这些错误,帮助用户纠正语法错误。误,帮助用户纠正语法错误。例子:例子:Foort=1 To 100Foort=1 To 1002.2.运行错误运行错误 运行时的错误是指应用程序在运行期间执行了非法操运行时的错误是指应用程序在运行期间执行了非法操作所发生的错误。作所发生的错误。例:除法运算中除数为零,访问文件时文件夹或文件找不到等。例:除法运算中除数为零,访问文件时文件夹或文件找不到等。这种错误只有在程序运行时才能被发现。这种错误只有在程序运行时才能被发现。举例举例(“(“下标越界下标越界”):Private Sub Form_Load():Private Sub Form_Load()Dim D(20)As Integer,k As Integer Dim D(20)As Integer,k As Integer For k=1 To 30 For k=1 To 30 D(k)=k*K D(k)=k*K Next k Next k End Sub End Sub3.3.逻辑错误逻辑错误 逻辑错误使程序运行时得不到预期的结果。这种程序逻辑错误使程序运行时得不到预期的结果。这种程序没有语法错误,也能运行,但却得不到正确的结果。没有语法错误,也能运行,但却得不到正确的结果。例:在一个算术表达式中,把乘号例:在一个算术表达式中,把乘号“*”“*”写成了加号写成了加号“+”+”,条件语句的条件写错,循环次数计算错误等条件语句的条件写错,循环次数计算错误等 1请在此处输入您的标题请在此处输入您的标题4请在此处输入您的标题请在此处输入您的标题2请在此处输入您的标题请在此处输入您的标题3请在此处输入您的标题请在此处输入您的标题目目 录录6 最新文档精品文档例如,要求例如,要求1010,若采用:,若采用:Private Sub Form_Load()Private Sub Form_Load()Dim t As Integer Dim t As Integer For i=1 To 10 For i=1 To 10 t=t*i t=t*i Next i Next i Show Show:Print tPrint t End Sub End Sub 运行程序时输出的结果是运行程序时输出的结果是0 0 通常,调试程序过程中所花的大部分时间和精力通常,调试程序过程中所花的大部分时间和精力都在逻辑错误上都在逻辑错误上程序工作模式:程序工作模式:设计模式、运行模式和中断模式设计模式、运行模式和中断模式 1 1设计模式设计模式 在设计模式下,可以建立应用程序的用户界面,设在设计模式下,可以建立应用程序的用户界面,设置控件的属性,编写程序代码等置控件的属性,编写程序代码等2.2.运行模式运行模式 在运行模式下,可以测试程序的运行结果,可以与在运行模式下,可以测试程序的运行结果,可以与应用程序对话,还可以应用程序对话,还可以 查看程序代码,但不能修改程查看程序代码,但不能修改程序序3.3.中断模式中断模式 在中断模式下,可以利用各种调试手段检查或更改在中断模式下,可以利用各种调试手段检查或更改某些变量或表达式的值,或者在断点附近单步执行程序某些变量或表达式的值,或者在断点附近单步执行程序,以便发现错误或改正错误,以便发现错误或改正错误 进入中断模式的方法:进入中断模式的方法:(1)(1)在代码中插入在代码中插入StopStop语句;语句;(2)(2)在代码窗口中设置断点在代码窗口中设置断点(用菜单命令用菜单命令);(3)(3)在代码窗口中设置断点在代码窗口中设置断点(鼠标操作鼠标操作);(4)(4)在程序运行时强制在程序运行时强制“中断中断”;(5)(5)当程序运行出现错误。当程序运行出现错误。当检查调试通过后,需要清除断点当检查调试通过后,需要清除断点 使用使用“调试调试”菜单或菜单或“调试调试”工具栏工具栏1 1切换断点切换断点 “切换断点切换断点”按钮用来设置断点按钮用来设置断点 2.2.逐语句逐语句 VBVB允许逐条语句执行程序,每执行一条语句后就返回中允许逐条语句执行程序,每执行一条语句后就返回中断模式。断模式。如果执行的是过程调用的代码如果执行的是过程调用的代码(如如Call)Call),“逐语句逐语句”操作也操作也会跟踪到被调过程中继续一条语句一条语句的执行会跟踪到被调过程中继续一条语句一条语句的执行 请在此处输入您的标题点击此处输入您的内容,建议微软雅黑或者黑体,本模版所有图形线条及其相应素材均可编辑、更改颜色。点击此处输入您的内容,建议微软雅黑或者黑体,本模版所有图形线条及其相应素材均可编辑、更改颜色。文本文本文本文本文本文本13最新文档精品文档3.3.逐过程逐过程 逐过程执行是以整个函数或过程为一个整体,一次执逐过程执行是以整个函数或过程为一个整体,一次执行。逐过程与逐语句一样,能够一条语句一条语句地执行行。逐过程与逐语句一样,能够一条语句一条语句地执行代码。把被调用的函数或过程当作一个语句来看待。代码。把被调用的函数或过程当作一个语句来看待。4.4.跳出跳出 单击单击“调试调试”工具栏上的工具栏上的“跳出跳出”按钮,则按钮,则VBVB将连续将连续执行完该过程的其余部分,返回调用过程的下一条语句并执行完该过程的其余部分,返回调用过程的下一条语句并回复中断模式。回复中断模式。5.5.本地窗口本地窗口 显示当前过程中所有变量和活动窗体的所有属性值显示当前过程中所有变量和活动窗体的所有属性值 MeMe代表当前窗体;单击代表当前窗体;单击“+”+”号或号或“-”-”号号6.6.立即窗口立即窗口 可以检查某个属性或者变量的值,也可以对表达式求可以检查某个属性或者变量的值,也可以对表达式求值,或为变量或属性赋值等值,或为变量或属性赋值等7.7.监视窗口监视窗口 对用户定义的表达式进行监视对用户定义的表达式进行监视 例例1 计算计算t=0.1+0.2+0.3+0.9+1 编写的程序代码如下:编写的程序代码如下:Private Sub Form_Load()Show Dim t As Single,i As Single t=0 For i=0.1 To 1 Step 0.1 t=t+i Next i Print 总和总和:;t End Sub运行结果为:总和:运行结果为:总和:4.54.5 这不是正确的答案,正确结这不是正确的答案,正确结果应是果应是5.55.5 1.在代码窗口中设置断点。在代码窗口中设置断点。为了了解循环过程中变量为了了解循环过程中变量i i和和t t的变化情况,可在语句的变化情况,可在语句t=t+i t=t+i 处设置断点。处设置断点。2.重新运行程序。重新运行程序。程序在断点处中断运行,进入中断模式程序在断点处中断运行,进入中断模式 3.单击单击“调试调试”工具栏上的工具栏上的“本地窗口本地窗口”按钮,利按钮,利用本地窗口来用本地窗口来监视过程中各量及属性值的变化情况监视过程中各量及属性值的变化情况 4.单击单击“调试调试”工具栏上的工具栏上的“逐语句逐语句”按钮,让程序按钮,让程序单步单步执行。执行。“本地窗口本地窗口”会显示出程序中所用变量的当前值会显示出程序中所用变量的当前值5.连续单击连续单击“逐语句逐语句”按钮,使程序在按钮,使程序在For语句语句循环执行循环执行9次,此时本地窗口显示的变量值如图所示次,此时本地窗口显示的变量值如图所示 6.再次单击再次单击“逐语句逐语句”按钮。程序不再继续循环,而是按钮。程序不再继续循环,而是退出循环,去执行退出循环,去执行Next i下一个的下一个的Print语句。语句。可以发现可以发现上述循环语句只是循环上述循环语句只是循环9次次。本来应该循环。本来应该循环10次,但由于小数点在机器内存储和处理会发生微小误差,当次,但由于小数点在机器内存储和处理会发生微小误差,当执行到第执行到第9次循环时,循环变量次循环时,循环变量i的值为的值为0.9000001,再加上步,再加上步长值长值0.1时,已经超过时,已经超过1,往下就不再执行循环体了。所以实,往下就不再执行循环体了。所以实际上才循环际上才循环9次,即只计算次,即只计算0.1+0.2+0.3+0.9(=4.5)当步长值为小数时,为了防止丢失循环次数,可将当步长值为小数时,为了防止丢失循环次数,可将终值终值适当增加,适当增加,一般是加上步长值的一半,例如:一般是加上步长值的一半,例如:For i=0.1 To 1.05 Step 0.1 调试程序往往比写程序更难调试程序往往比写程序更难 由于应用环境等的改变,有时程序还会出现错误。例由于应用环境等的改变,有时程序还会出现错误。例如文件未找到等。这类如文件未找到等。这类“运行时错误运行时错误”并非致命的错误。并非致命的错误。对于这些可预见的错误,可以利用对于这些可预见的错误,可以利用VB的错误处理程的错误处理程序捕获它,对其进行适当的处理,并使程序继续执行。这序捕获它,对其进行适当的处理,并使程序继续执行。这样就能够使开发的软件具有更强的适应性。样就能够使开发的软件具有更强的适应性。谢谢观看24最新文档精品文档 错误处理的步骤:错误处理的步骤:(1)利用利用Err对象记录错误的类型、出错原因等。对象记录错误的类型、出错原因等。(2)强制转移到用户自编的强制转移到用户自编的“错误处理程序段错误处理程序段”的入口。的入口。(3)在在“错误处理程序段错误处理程序段”内,根据具体错误进行处理,内,根据具体错误进行处理,如果问题有解决方法,则在处理后返回原程序某处继续执如果问题有解决方法,则在处理后返回原程序某处继续执行,否则,停止程序执行行,否则,停止程序执行退出错误处理语句退出错误处理语句(Resume)(Resume)当指定的错误处理完成后,应该控制程序返回到合适当指定的错误处理完成后,应该控制程序返回到合适的位置继续执行。的位置继续执行。返回语句返回语句Resume有三种用法:有三种用法:(1)Resume 0:程序返回到出错语句处继续执行。:程序返回到出错语句处继续执行。(2)Resume Next:程序返回到出错语句的下一语句。:程序返回到出错语句的下一语句。(3)Resume 标号:程序返回到标号处继续执行。标号:程序返回到标号处继续执行。输入某个数,求该数的平方根。输入某个数,求该数的平方根。当用户输入负数时,使用当用户输入负数时,使用OnError.ResumeOnError.Resume进行处理进行处理Private Sub Form_Load()Dim x As Single,y As Single,i As String On Error GoTo errln 以下出错时转移到errln Show:i=i 为实数标记 x=Val(InputBox(请输入一个数)y=Sqr(x)Print y;i:Exit Sub 显示及退出过程errln:标号 If Err.Number=5 Then 本错误的错误码为5 x=-x 转换为正数 i=i 复数标记 Resume 返回 Else 其他错误处理MsgBox(错误发生在&Err.Source&,代码为&_ Err.Number&,即&Err.Description)End End IfEnd Sub错误处理程序示例错误处理程序示例 程序运行时,当用户输入一个正数时,则显示出该数程序运行时,当用户输入一个正数时,则显示出该数的平方根;如果输入的是一个负数,则因求负数的平方根的平方根;如果输入的是一个负数,则因求负数的平方根(通过函数通过函数Sqr()而出错,此时会跳转到错误处理程序段。而出错,此时会跳转到错误处理程序段。在错误处理程序段中,先判断错误码,若是在错误处理程序段中,先判断错误码,若是5(即发生即发生求负数的平方根的错误求负数的平方根的错误),则将该负数转换为正数,设置复,则将该负数转换为正数,设置复数标记,然后执行数标记,然后执行Resume语句返回到原出错处继续执行。语句返回到原出错处继续执行。如果发生的不是错误如果发生的不是错误5,则显示有关信息后强制结束,则显示有关信息后强制结束请在此输入您的大标题请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入您的小标题请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入您的小标题请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入文本请输入您的小标题29最新文档精品文档常见错误常见错误1.1.使用中文标点符号使用中文标点符号 系统产生系统产生“无效字符无效字符”,红色表示,红色表示2.2.字母和数字形状相似字母和数字形状相似 如如11和和l,0l,0和和oo3.3.对象名称(对象名称(NameName)写错)写错4.4.对象属性名、方法名或标准函数名写错对象属性名、方法名或标准函数名写错 尽量使用自动列出成员功尽量使用自动列出成员功5.5.无意形成控件数组无意形成控件数组 建立控件时小心使用复制、粘贴功能建立控件时小心使用复制、粘贴功能6.6.打开工程时找不到对应文件打开工程时找不到对应文件 保存文件时先保存窗体文件(保存文件时先保存窗体文件(.frm.frm),再保存工),再保存工程文件(程文件(.vbp.vbp),注意路径),注意路径常见错误常见错误谢 谢!
展开阅读全文