您的位置:首页 > 编程语言 > ASP

ASP调试技术

2005-09-13 20:47 253 查看
近来,一直有网友的程序出错了,而他自己又没有办法找到,所以打算把自己的经验总结一下,希望对大家有所帮助。说是ASP调试技术,其实对于其它的脚本类的开发语言都是适用的,只是我这里是以ASP为例来说明的。因为ASP等脚本是没有开发的IDE来支持,基本上也没有Debuger可以使用,所以调试起来比其它的程序都要难,但是只要肯花心思去想,还是可以很容易地找到出错的原因的。调试的过程可以分为以下几个步骤:1、找到出错的地方;2、分析出错的原因;3修正错误。下面我对这几个步骤一一进行说明。一、找到出错的地方脚本的错误有两种:运行时错误和语法错误。这个对应于其它的程序的运行时错误和编译器错误。只要在IIS上没有禁用掉:向客户端正发送详细的ASP错误码率信息,我们就可以看到ASP的运行时错误和语法错误。如果你打开的时候看到的只是写着500服务器内部错误码的页面时,你应该修改你的IE浏览器的设置了:在Internet选项里,选择高级选项卡,把里面的“显示友好的HTTP错误”前面的勾去掉,重启IE就可以看到详细的错误信息。让我们看一下错误信息的格式:以下是编译器错误Microsoft VBScript 编译器错误 错误 '800a0401'
语句未结束
/play.asp,行 2
for i = 0 to 20 do
----------------^
运行时错误
Microsoft VBScript 运行时错误 错误 '800a0009'
下标越界: 'i'
/play.asp,行 4
我们应该注意到,并不是每个版本的IIS都会给出这么详细的错误信息。但是肯定会给出的三个信息是:是运行时错误还是编译器错误,错误所在的语句行,错误代码。让我们先学习一下怎么看这个错误代码:800aXXXX后面四个X表示的是四位的十六进制数,把它转成十进制后,去查VBScript的帮助手册,就可以得到详细的错误描述了。还有一个要说明的是在调试过程中,尽可能地把on error resume next这样的语句干掉,因为它可以把异常吃掉,导致我们无法正确定位到错误所在,很多时候,就是因为这个语句要走很多弯路。On error resume next 语句的作用应该是用来捕获异常的,比如说写入文本的时候出错,或是连接数据库的时候发现数据库没有启动,而不是让它去屏蔽你程序中自身引起的运行错误,比如说下标越界等。我们还应该注意到,报错所在的行,并不一定是真正出错的地方,而是由于前面的错误,引发了下面的错误,最经常看到的是end if 找不到前面的if可以匹配,这时候很可能是前面少写了一个if 或是一个else。如果我们有良好的书写习惯,注意缩进,尽量把程序写成小函数的形式,这样的错误还是比较容易看出来的。还有一种错误就是执行错误,也就是程序都不报错,但是得不到正确的结果。对于多分支的程序,首先你得判断一下你的流程走过的语句顺序:我是通过设置“停点”来判断的,也就是在你认为应该的流程里写上:response.write a:response.end 里面的a是一个顺序码,可以是1,2,3……这样的,目的是为了区别你的所设置的“停点”,找到了一个点后,把这个点去掉,接着找下一个点,以此来判断你的流程是否是和你所想的一致,然后在这些流程中间的关键地方,把中间变量输出:response.write 变量名 再查看页面,通过这些变量的中间结果看哪里不正确了。以此来找出错误的地方和错误的原因。二、分析出错的原因并修正找到了出错的地方后,我们就应该分析为什么出错了。对于编译器的错误,由于是语法错误,应该容易找到原因。对于运行时错误,在前面讲查找错误的地点的时候,也讲了一些了,可以通过错误码来判断出错的原因。对于执行错误,要认真检查你的代码了,一般比较容易出错的几个地方是:1、如果你的变量是没有定义就用,则很可能存在着局部变量和全局变量冲突的问题。2、还有脚本类的,很多变量都是没有类型的。所以在作判断的时候很容易出错。比如说你的一个变量a从数据库得到的值为5,然后用 if a = 5 then 来判断,这时候很可能会得到false的结果;而用if a- 5= 0 then 这时候才会得到true的结果。因为前面得到的a是无类型的,不是数字,所以不会等于5但是经过一次减法运算时,会做类型转换,所以后面可以得到True。3、变量在用的过程中没有重新初化,特别是循环里面,如果这个变量不是用于统计循环里面的结果的,则每次用之前要重新初始化,不然上一次的运行结果会影响到这个变量的值,引起不必要的麻烦。4、SQL,由于ASP大部分是基于数据库来开发应用的,所以SQL的错误也不可忽视。很多时候都是通过拼接的方式生成查询所要的SQL,所以如果出现了问题,基本上第一时间里面要看生成的SQL是不是我们所需要的,再把它放到查询分析器里面去看,它是否可以正常地执行,能否得到我们所需的结果。
调试的过程是一项很烦琐的过程,所以要有耐心,也只有在调试的过程中才会让你学习到更多的东西。为了更好地调试,需要有一个良好的书写习惯,我们在写代码的时候,尽量要写小函数,作好缩进,每个变量使用前都要定义等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: