欢迎光临
我们一直在努力

浅谈asp编程中的测试打印、有效性检查及错误处理

建站超值云服务器,限时71元/月

经常看到一些初学asp的朋友为了测试一个值到处用response.write来打印,

而要看页面效果时再删除这些语句或加上注释,在正式版本出来以前要如此反复

多次。而有些人为了减少麻烦,干脆全当它是正确的,不做测试输出,像这样极

易出现各种各样的问题,最常见的是如果要生成一条sql语句,需要使用变量,如

果不做测试打印,很难做到一次正确,在chinaasp论坛里经常见到这种问题,老

是有人问这条语句为什么会出错等问题,实际上他只要打印出这条语句看一下语

法是否正确就行了,而不必到处追着人问。事实上好的编程习惯应该是在自己没

有很大把握的情况下把生成的语句或变量值打印出来,但这样做又费时费力,有

没有比较好的解决方法呢?

在c里可以使用 _debug这样的测试开关来控制debug版本和release版本,但

asp中并没有类似#define这种语句,那么是不是我们就没有办法了呢?其实我们

可以仿照c的这种做法,那就是在global.asa文件里定义一个application变量来

控制,象下面这个例子:

在global.asp里加上:

application("debug") = 1

然后做这么一个过程:

——————————————————–

name: print

argument: a_strprint: 打印字符串

return:

description: 打印(仅在debug状态下运行)

hitory: create by bigeagle

——————————————————–

sub print(a_strprint)

if application("debug") = 1 then

response.write("<p aling=center>"+a_strprint+"</p>")

end if

end sub

这个过程的功能就是当测试开关打开时(application("debug") = 1)打印

,而当测试开关关闭(application("debug") = 0)就不会有打印输出了。这样

在程序调试期间,你可以打开测试开关,以观察变量的值,而当要看页面效果或

发布release版本时就可以关闭测试开关,这样所有的测试输出就不会出现在页面

上。

以上谈到的是变量的测试输出,下面要谈谈正确性检测问题。经常见到很多

人把页面提交过来或数据库取出的值想都不想就用,根本不做正确性检测,那你

怎么能保证这些值的正确性呢?比如有一个input,提交后它的值应该是一个值包

含数字的字符串,但如果用户的输入包含其他字符,若不做正确性检测,那当你

用cint或clng转换时就会发生错误,整个程序崩溃。另外一种情况是这样,当你

从数据库中取值或诸如此类的操作,应该是不会发生问题,但如果出现数据库出

错等问题,那么用户也只能见到一个诸如odbc错误等等的提示信息,对于一个

成熟的商品程序来说,这点是很不好的,其实现在包括国内很多知名站点也出现

这种问题。所以应该养成这样一个习惯,那就是任何可能出问题的变量、参数在

使用之前都应该做正确性检测,并且对数据库操作后应当判断否成功。这是就又出现一个版本问题,如果是debug版则应显示出错信息以备修改,而release版则应该引导到一个统一页面,如“本站暂时出现未知故障,请稍候再来"等等,原则上永远不要给用户一个系统出错信息页面。要实现上述功能,请看以下几个函数和过程。

——————————————————–

name: assert

argument: a_blnconditon: 断言条件

a_functionname: 调用函数

a_errorstring: 错误描叙

return:

description: 断言

hitory: create by bigeagle

——————————————————–

sub assert(a_blnconditon,a_functionname,a_errorstring)

if application("debug") = 0 then

if a_blnconditon <> true then

response.redirect("../include/bigerror.asp")

end if

else

if a_blnconditon <> true then

call print("断言错误:在<font color=red>" + a_functionname + "</font>出现:" + a_errorstring)

response.end

end if

end if

end sub

这个过程的作用是检测变量或参数有效性,如果条件a_blncondition<>true,那么如果测试开关打开,则显示错误信息,如果测试开关关闭,则重定向到错误处理页面bigerror.asp。

——————————————————–

name: checkerror

argument:

return:

description: 检查错误

hitory: create by yaozhigang

——————————————————–

function checkerror()

dim interrnumber

interrnumber = err.number 保存错误代码,因为在error中将执行err.clear

if interrnumber <> 0 then call error(-1, "") err错误的错误码为-1

checkerror = interrnumber

end function

——————————————————–

name: error

argument: a_interrcode:错误码(-1时表示是系统错误,即err.number<>0)

a_strerrtext:错误描述

return:

description: 错误处理

hitory: create by yaozhigang

——————————————————–

sub error(a_interrcode, a_strerrtext)

dim strmsg

dim strlogmsg

如果是err错误,则一定执行错误页

if a_interrcode = -1 then

strmsg = strmsg + "*********************************************************************************************" + "<br>"

strmsg = strmsg + "错误时间:" + cstr(now()) + "<br>"

strmsg = strmsg + "错误类型:err错误" + "<br>"

strmsg = strmsg + "错误号 :" + cstr(err.number) + "<br>"

strmsg = strmsg + "错误源 :" + err.source + "<br>"

strmsg = strmsg + "错误描述:" + err.description + "<br>"

strmsg = strmsg + "*********************************************************************************************" + "<br>"

strlogmsg = strlogmsg + "*********************************************************************************************" + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误时间:" + cstr(now()) + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误类型:err错误" + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误号 :" + cstr(err.number) + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误源 :" + err.source + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误描述:" + err.description + chr(13) + chr(10)

strlogmsg = strlogmsg + "*********************************************************************************************" + chr(13) + chr(10)

清空err

err.clear

在redirect之前写日志

writelog(strlogmsg)

strmsg = server.urlencode(strmsg)

如果是调试则显示错误代码

if application("debug") = 1 then

response.redirect("../include/error.asp?" + _

"errtext="&strmsg&"")

else

response.redirect("../include/error.asp")

end if

如果是程序错误,则写日志

else

strmsg = strmsg + "*********************************************************************************************" + "<br>"

strmsg = strmsg + "错误时间:" + cstr(now()) + "<br>"

strlogmsg = strlogmsg + "*********************************************************************************************" + chr(13) + chr(10)

strlogmsg = strlogmsg + "错误时间:" + cstr(now()) + chr(13) + chr(10)

dim strwhicherr

select case a_interrcode

case 99001 程序错误从99001开始

strwhicherr = "断言错误"

case 99002

strwhicherr = "case else 错误"

case else

strwhicherr = "未知的错误"

end select

strmsg = strmsg + "错误类型:" + strwhicherr + "<br>"

if a_strerrtext <> "" then

strmsg = strmsg + "错误描述:" + a_strerrtext + "<br>"

end if

strmsg = strmsg + "*********************************************************************************************" + "<br>"

strlogmsg = strlogmsg + "错误类型:" + strwhicherr + chr(13) + chr(10)

if a_strerrtext <> "" then

strlogmsg = strlogmsg + "错误描述:" + a_strerrtext + chr(13) + chr(10)

end if

strlogmsg = strlogmsg + "*********************************************************************************************" + chr(13) + chr(10)

写日志

writelog(strlogmsg)

如果是调试状态则指向错误页

if application("debug") = 1 then

strmsg = server.urlencode(strmsg)

response.redirect("http://server1/4biz/include/error.asp?" + _

"errtext="&strmsg&"")

end if

end if

end sub

——————————————————–

name: writelog

argument: a_strmsg:日志内容

return:

description: 错误处理

hitory: create by yaozhigang

——————————————————–

function writelog(a_strmsg)

dim strfilename

if application("g_strlogfilename") = "" then

strfilename = "c:\asplog.txt"

else

strfilename = application("g_strlogfilename")

end if

dim objfso

dim objfile

set objfso = createobject("scripting.filesystemobject")

只有一个人写日志

application.lock

set objfile = objfso.opentextfile(strfilename, 8, true, 0)

objfile.write(a_strmsg)

objfile.close

application.unlock

set objfile = nothing

set objfso = nothing

end function

以上几个函数及过程的作用是处理数据库错误,注意使用时在global.asp里加上on eroor resume,以使错误处理程序能够运行。其中可以显示错误代码、写日志文件,详细内容我就不做解释了,请自己研究一下源代码。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 浅谈asp编程中的测试打印、有效性检查及错误处理
分享到: 更多 (0)

相关推荐

  • 暂无文章