ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法“response.write”,然后输出相关的语句来看看是否正确。前几天写了一个千行的页面,里面大概有七八个SUB/FUNCTION,调试的时候用了有三十几个response.write,天,调试完后把这三十个一个个删除,累!
今天看到一个ASP中的Debug类(VBS),试用了一下,绝!
使用方法很简单:
test.asp
<>
<%
output="XXXX"
Setdebugstr=NewdebuggingConsole
debugstr.Enabled=true
debugstr.Print"参数output的值",output
''……
debugstr.draw
Setdebugstr=Nothing
%>
===================================================
debuggingConsole.asp
<%
ClassdebuggingConsole
privatedbg_Enabled
privatedbg_Show
privatedbg_RequestTime
privatedbg_FinishTime
privatedbg_Data
privatedbg_DB_Data
privatedbg_AllVars
privatedbg_Show_default
privateDivSets(2)
''Construktor=>setthedefaultvalues
PrivateSubClass_Initialize()
dbg_RequestTime=Now()
dbg_AllVars=false
Setdbg_Data=Server.CreateObject("Scripting.Dictionary")
DivSets(0)="<TR><TDstyle=''cursor:hand;''onclick=""javascript:if(document.getElementById(''data#sectname#'').style.display==''none''){document.getElementById(''data#sectname#'').style.display=''block'';}else{document.getElementById(''data#sectname#'').style.display=''none'';}""><DIVid=sect#sectname#style=""font-weight:bold;cursor:hand;background:#7EA5D7;color:white;padding-left:4;padding-right:4;padding-bottom:2;"">|#title#|<DIVid=data#sectname#style=""cursor:text;display:none;background:#FFFFFF;padding-left:8;""onclick=""window.event.cancelBubble=true;"">|#data#|</DIV>|</DIV>|"
DivSets(1)="<TR><TD><DIVid=sect#sectname#style=""font-weight:bold;cursor:hand;background:#7EA5D7;color:white;padding-left:4;padding-right:4;padding-bottom:2;""onclick=""javascript:if(document.getElementById(''data#sectname#'').style.display==''none''){document.getElementById(''data#sectname#'').style.display=''block'';}else{document.getElementById(''data#sectname#'').style.display=''none'';}"">|#title#|<DIVid=data#sectname#style=""cursor:text;display:block;background:#FFFFFF;padding-left:8;""onclick=""window.event.cancelBubble=true;"">|#data#|</DIV>|</DIV>|"
DivSets(2)="<TR><TD><DIVid=sect#sectname#style=""background:#7EA5D7;color:lightsteelblue;padding-left:4;padding-right:4;padding-bottom:2;"">|#title#|<DIVid=data#sectname#style=""display:none;background:lightsteelblue;padding-left:8"">|#data#|</DIV>|</DIV>|"
dbg_Show_default="0,0,0,0,0,0,0,0,0,0,0"
EndSub
PublicPropertyLetEnabled(bNewValue)''''[bool]Sets"enabled"totrueorfalse
dbg_Enabled=bNewValue
EndProperty
PublicPropertyGetEnabled''''[bool]Getsthe"enabled"value
Enabled=dbg_Enabled
EndProperty
PublicPropertyLetShow(bNewValue)''''[string]Setsthedebuggingpanel.Whereeachdigitinthestringrepresentsadebuginformationpaneinorder(11ofthem).1=open,0=closed
dbg_Show=bNewValue
EndProperty
PublicPropertyGetShow''''[string]Getsthedebuggingpanel.
Show=dbg_Show
EndProperty
PublicPropertyLetAllVars(bNewValue)''''[bool]Setswheatherallvariableswillbedisplayedornot.true/false
dbg_AllVars=bNewValue
EndProperty
PublicPropertyGetAllVars''''[bool]Getsifallvariableswillbedisplayed.
AllVars=dbg_AllVars
EndProperty
''******************************************************************************************************************
''''@SDESCRIPTION:Addsavariabletothedebug-informations.
''''@PARAM:-label[string]:Descriptionofthevariable
''''@PARAM:-output[variable]:Thevariableitself
''******************************************************************************************************************
PublicSubPrint(label,output)
Ifdbg_EnabledThen
iferr.number>0then
calldbg_Data.Add(ValidLabel(label),"!!!Error:"&err.number&""&err.Description)
err.Clear
else
uniqueID=ValidLabel(label)
response.writeuniqueID
calldbg_Data.Add(uniqueID,output)
endif
EndIf
EndSub
''******************************************************************************************************************
''*ValidLabel
''******************************************************************************************************************
PrivateFunctionValidLabel(byvallabel)
dimi,lbl
i=0
lbl=label
do
ifnotdbg_Data.Exists(lbl)thenexitdo
i=i+1
lbl=label&"("&i&")"
loopuntili=i
ValidLabel=lbl
EndFunction
''******************************************************************************************************************
''*PrintCookiesInfo
''******************************************************************************************************************
PrivateSubPrintCookiesInfo(byvalDivSetNo)
dimtbl,cookie,key,tmp
ForEachcookieinRequest.Cookies
IfNotRequest.Cookies(cookie).HasKeysThen
tbl=AddRow(tbl,cookie,Request.Cookies(cookie))
Else
ForEachkeyinRequest.Cookies(cookie)
tbl=AddRow(tbl,cookie&"("&key&")",Request.Cookies(cookie)(key))
Next
EndIf
Next
tbl=MakeTable(tbl)
ifRequest.Cookies.count<=0thenDivSetNo=2
tmp=replace(replace(replace(DivSets(DivSetNo),"#sectname#","COOKIES"),"#title#","COOKIES"),"#data#",tbl)
Response.Writereplace(tmp,"|",vbcrlf)
endsub
''******************************************************************************************************************
''*PrintSummaryInfo
''******************************************************************************************************************
PrivateSubPrintSummaryInfo(byvalDivSetNo)
dimtmp,tbl
tbl=AddRow(tbl,"TimeofRequest",dbg_RequestTime)
tbl=AddRow(tbl,"ElapsedTime",DateDiff("s",dbg_RequestTime,dbg_FinishTime)&"seconds")
tbl=AddRow(tbl,"RequestType",Request.ServerVariables("REQUEST_METHOD"))
tbl=AddRow(tbl,"StatusCode",Response.Status)
tbl=AddRow(tbl,"ScriptEngine",ScriptEngine&""&ScriptEngineMajorVersion&"."&ScriptEngineMinorVersion&"."&ScriptEngineBuildVersion)
tbl=MakeTable(tbl)
tmp=replace(replace(replace(DivSets(DivSetNo),"#sectname#","SUMMARY"),"#title#","SUMMARYINFO"),"#data#",tbl)
Response.Writereplace(tmp,"|",vbcrlf)
EndSub
''******************************************************************************************************************
''''@SDESCRIPTION:AddstheDatabase-connectionobjecttothedebug-instance.TodisplayDatabase-information
''''@PARAM:-oSQLDB[object]:connection-object
''******************************************************************************************************************
PublicSubGrabDatabaseInfo(byvaloSQLDB)
dbg_DB_Data=AddRow(dbg_DB_Data,"ADOVer",oSQLDB.Version)
dbg_DB_Data=AddRow(dbg_DB_Data,"OLEDBVer",oSQLDB.Properties("OLEDBVersion"))
dbg_DB_Data=AddRow(dbg_DB_Data,"DBMS",oSQLDB.Properties("DBMSName")&"Ver:"&oSQLDB.Properties("DBMSVersion"))
dbg_DB_Data=AddRow(dbg_DB_Data,"Provider",oSQLDB.Properties("ProviderName")&"Ver:"&oSQLDB.Properties("ProviderVersion"))
EndSub
''******************************************************************************************************************
''*PrintDatabaseInfo
''******************************************************************************************************************
PrivateSubPrintDatabaseInfo(byvalDivSetNo)
dimtbl
tbl=MakeTable(dbg_DB_Data)
tbl=replace(replace(replace(DivSets(DivSetNo),"#sectname#","DATABASE"),"#title#","DATABASEINFO"),"#data#",tbl)
Response.Writereplace(tbl,"|",vbcrlf)
EndSub
''******************************************************************************************************************
''*PrintCollection
''******************************************************************************************************************
PrivateSubPrintCollection(ByvalName,ByValCollection,ByValDivSetNo,ByValExtraInfo)
DimvItem,tbl,Temp
ForEachvItemInCollection
ifisobject(Collection(vItem))andName<>"SERVERVARIABLES"andName<>"QUERYSTRING"andName<>"FORM"then
tbl=AddRow(tbl,vItem,"{object}")
elseifisnull(Collection(vItem))then
tbl=AddRow(tbl,vItem,"{null}")
elseifisarray(Collection(vItem))then
tbl=AddRow(tbl,vItem,"{array}")
else
ifdbg_AllVarsthen
tbl=AddRow(tbl,"<nobr>"&vItem&"</nobr>",server.HTMLEncode(Collection(vItem)))
elseif(Name="SERVERVARIABLES"andvItem<>"ALL_HTTP"andvItem<>"ALL_RAW")orName<>"SERVERVARIABLES"then
ifCollection(vItem)<>""then
tbl=AddRow(tbl,vItem,server.HTMLEncode(Collection(vItem)))''&"{"&TypeName(Collection(vItem))&"}")
else
tbl=AddRow(tbl,vItem,"...")
endif
endif
endif
Next
ifExtraInfo<>""thentbl=tbl&"<TR><TDCOLSPAN=2><HR></TR>"&ExtraInfo
tbl=MakeTable(tbl)
ifCollection.count<=0thenDivSetNo=2
tbl=replace(replace(DivSets(DivSetNo),"#title#",Name),"#data#",tbl)
tbl=replace(tbl,"#sectname#",replace(Name,"",""))
Response.Writereplace(tbl,"|",vbcrlf)
EndSub
''******************************************************************************************************************
''*AddRow
''******************************************************************************************************************
PrivateFunctionAddRow(byvalt,byvalvar,byvalval)
t=t&"|<TRvalign=top>|<TD>|"&var&"|<TD>="&val&"|</TR>"
AddRow=t
EndFunction
''******************************************************************************************************************
''*MakeTable
''******************************************************************************************************************
PrivateFunctionMakeTable(byvaltdata)
tdata="|<tableborder=0style=""font-size:10pt;font-weight:normal;"">"+tdata+"</Table>|"
MakeTable=tdata
EndFunction
''******************************************************************************************************************
''''@SDESCRIPTION:DrawstheDebug-panel
''******************************************************************************************************************
PublicSubdraw()
Ifdbg_EnabledThen
dbg_FinishTime=Now()
DimDivSet,x
DivSet=split(dbg_Show_default,",")
dbg_Show=split(dbg_Show,",")
Forx=0toubound(dbg_Show)
divSet(x)=dbg_Show(x)
Next
Response.Write"<BR><Tablewidth=100%cellspacing=0border=0style=""font-family:arial;font-size:9pt;font-weight:normal;""><TR><TD><DIVstyle=""background:#005A9E;color:white;padding:4;font-size:12pt;font-weight:bold;"">Debugging-console:</DIV>"
CallPrintSummaryInfo(divSet(0))
CallPrintCollection("VARIABLES",dbg_Data,divSet(1),"")
CallPrintCollection("QUERYSTRING",Request.QueryString(),divSet(2),"")
CallPrintCollection("FORM",Request.Form(),divSet(3),"")
CallPrintCookiesInfo(divSet(4))
CallPrintCollection("SESSION",Session.Contents(),divSet(5),AddRow(AddRow(AddRow("","LocaleID",Session.LCID&"(&H"&Hex(Session.LCID)&")"),"CodePage",Session.CodePage),"SessionID",Session.SessionID))
CallPrintCollection("APPLICATION",Application.Contents(),divSet(6),"")
CallPrintCollection("SERVERVARIABLES",Request.ServerVariables(),divSet(7),AddRow("","Timeout",Server.ScriptTimeout))
CallPrintDatabaseInfo(divSet(8))
CallPrintCollection("SESSIONSTATICOBJECTS",Session.StaticObjects(),divSet(9),"")
CallPrintCollection("APPLICATIONSTATICOBJECTS",Application.StaticObjects(),divSet(10),"")
Response.Write"</Table>"
EndIf
EndSub
''Destructor
PrivateSubClass_Terminate()
Setdbg_Data=Nothing
EndSub
EndClass
%>
类的说明:
CLASSdebuggingConsole
Version:1.2
PublicProperties
PropertyLetEnabled(bNewValue)[bool]Sets"enabled"totrueorfalse
PropertyGetEnabled[bool]Getsthe"enabled"value
PropertyLetShow(bNewValue)[string]Setsthedebuggingpanel.Whereeachdigitinthestringrepresentsadebuginformationpaneinorder(11ofthem).1=open,0=closed
PropertyGetShow[string]Getsthedebuggingpanel.
PropertyLetAllVars(bNewValue)[bool]Setswheatherallvariableswillbedisplayedornot.true/false
PropertyGetAllVars[bool]Getsifallvariableswillbedisplayed.
PublicMethods
publicsubPrint(label,output)
Addsavariabletothedebug-informations.
publicsubGrabDatabaseInfo(byvaloSQLDB)
AddstheDatabase-connectionobjecttothedebug-instance.TodisplayDatabase-information
publicsubdraw()
DrawstheDebug-panel
MethodsDetail
publicsubPrint(label,output)
Parameters:-label[string]:Descriptionofthevariable
-output[variable]:Thevariableitself
publicsubGrabDatabaseInfo(byvaloSQLDB)
Parameters:-oSQLDB[object]:connection-object