在asp调试的时候,经常是根据出现的错误提示来找到错误的地方,然后作相应的修改,直到没有错误为止。这不仅是asp调试的方法,也是所有程序的调试方法。在asp的运行过程中,如何更明白的显示出现的错误在哪个页面,第几行,但又不能让客户端看到这个错误。所以想出来一个方法:使用on error resume next,将错误不显示到页面上,这样就不会给客户看到。但还要将错误写到一个自定义的日志文件中,以便我们开发人员方便找到错误所在的页面,或者对出现错误的情况下,转向一个自定义的页面上来,这样能给客户更好的体验。
过程名:catch(str)
功 能:清除IIS的错误提示信息,自定义错误提示返回给用户,并将出错信息保存到txt文件(当然你也可以稍做修改转向自定义页面等)
使用方法:
<% on error resume next '你的代码,如数据库连接 call catch("显示给用户的提示信息") %>(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
catch 函数的具体代码如下:
<% option explicit '例一--------------------------- '必须和on error resume next一起使用,但在网页没有正式发布之前最好将其注释掉,以免在调试时看不到出错详细信息 on error resume next 'i没有定义,会出错,使用catch清除错误并保存到记事本 call catch("页面无法访问") '------------------------------- '例二--------------------------- function conn() '必须和on error resume next一起使用 on error resume next '...........你的连接数据库代码 call catch("数据库打开错误") end function '------------------------------- sub catch(str) if err.number <> 0 then dim tmp,path '错误日志绝对路径,如"/error_log.txt" path = "/table/error_log.txt" tmp = tmp & "出错页面:" & geturl & vbcrlf tmp = tmp & "错误时间:" & now() & vbcrlf tmp = tmp & "来访IP:" & ip & vbcrlf tmp = tmp & "提示信息:" & str & vbcrlf tmp = tmp & "错误代号:" & err.number & vbcrlf tmp = tmp & "错误信息:" & err.description & vbcrlf tmp = tmp & "应用程序:" & err.source & vbcrlf & vbcrlf & vbcrlf tmp = tmp & file_read(path) call file_save(tmp,path,1) err.clear() die(str) end if end sub '以下为catch所用到的函数-------------------- sub echo(str) response.write(str) end sub sub die(str) echo(str) : response.end() end sub function ip() ip = request.servervariables("remote_addr") end function '获取当前URL function geturl() dim tmp if lcase(request.servervariables("https")) = "off" then tmp = "http://" else tmp = "https://" end if tmp = tmp & request.servervariables("server_name") if request.servervariables("server_port") <> 80 then tmp = tmp & ":" & request.servervariables("server_port") end if tmp = tmp & request.servervariables("url") if trim(request.querystring) <> "" then tmp = tmp & "?" & trim(request.queryString) end if geturl = tmp end function '函数:读取文件内容到字符串 function file_read(path) dim tmp : tmp = "false" if not file_exists(path) then file_read = tmp : exit function dim stream : set stream = server.CreateObject("ADODB.Stream") with stream .type = 2 '文本类型 .mode = 3 '读写模式 .charset = "gb2312" .open .loadfromfile(server.MapPath(path)) tmp = .readtext() end with stream.close : set stream = nothing file_read = tmp end function '函数:保存字符串到文件 function file_save(str,path,model) if model<>0 and model<>1 then model=1 if model=0 and file_exists(path) then file_save=true : exit function dim stream : set stream = server.CreateObject("ADODB.Stream") with stream .type = 2 '文本类型 .charset = "gb2312" .open .writetext str .savetofile(server.MapPath(path)),model+1 end with stream.close : set stream = nothing file_save = file_exists(path) end function '函数:检测文件/文件夹是否存在 function file_exists(path) dim tmp : tmp = false dim fso : set fso = server.CreateObject("Scripting.FilesyStemObject") if fso.fileexists(server.MapPath(path)) then tmp = true if fso.folderexists(server.MapPath(path)) then tmp = true set fso = nothing file_exists = tmp end function %>(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)