| 关键词: nbsp tbl dbg AddRow Property private Data replace Enabled Public |
译者的话: 不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法“response.write ”,然后输出相关的语句来看看是否正确。前几天写了一个千行的页面,里面大概有七八个SUB/FUNCTION,调试的时候用了有三十几个response.write ,天,调试完后把这三十个一个个删除,累! 今天看到一个ASP中的Debug类(VBS),试用了一下,绝! 使用方法很简单: test.asp output="XXXX" Set debugstr = New debuggingConsole debugstr.Enabled = true debugstr.Print "参数output的值", output '…… debugstr.draw Set debugstr = Nothing %> =================================================== debuggingConsole.asp Class debuggingConsole private dbg_Enabled private dbg_Show private dbg_RequestTime private dbg_FinishTime private dbg_Data private dbg_DB_Data private dbg_AllVars private dbg_Show_default private DivSets(2) 'Construktor => set the default values Private Sub Class_Initialize() dbg_RequestTime = Now() dbg_AllVars = false Set dbg_Data = Server.CreateObject("Scripting.Dictionary") DivSets(0) = "|#title#| |#data#| ||" DivSets(1) = "|#title#| |#data#| ||" DivSets(2) = "|#title#| |#data#| ||" dbg_Show_default = "0,0,0,0,0,0,0,0,0,0,0" End Sub Public Property Let Enabled(bNewValue) ''[bool] Sets "enabled" to true or false dbg_Enabled = bNewValue End Property Public Property Get Enabled ''[bool] Gets the "enabled" value Enabled = dbg_Enabled End Property Public Property Let Show(bNewValue) ''[string] Sets the debugging panel. Where each digit in the string represents a debug information pane in order (11 of them). 1=open, 0=closed dbg_Show = bNewValue End Property Public Property Get Show ''[string] Gets the debugging panel. Show = dbg_Show End Property Public Property Let AllVars(bNewValue) ''[bool] Sets wheather all variables will be displayed or not. true/false dbg_AllVars = bNewValue End Property Public Property Get AllVars ''[bool] Gets if all variables will be displayed. AllVars = dbg_AllVars End Property '*********************************************************** ''@SDESCRIPTION: Adds a variable to the debug-informations. ''@PARAM: - label [string]: Description of the variable ''@PARAM: - output [variable]: The variable itself '*********************************************************** Public Sub Print(label, output) If dbg_Enabled Then if err.number > 0 then call dbg_Data.Add(ValidLabel(label), "!!! Error: " & err.number & " " & err.Description) err.Clear else uniqueID = ValidLabel(label) response.write uniqueID call dbg_Data.Add(uniqueID, output) end if End If End Sub '*********************************************************** '* ValidLabel '*********************************************************** Private Function ValidLabel(byval label) dim i, lbl i = 0 lbl = label do if not dbg_Data.Exists(lbl) then exit do i = i + 1 lbl = label & "(" & i & ")" loop until i = i ValidLabel = lbl End Function '*********************************************************** '* PrintCookiesInfo '*********************************************************** Private Sub PrintCookiesInfo(byval DivSetNo) dim tbl, cookie, key, tmp For Each cookie in Request.Cookies If Not Request.Cookies(cookie).HasKeys Then tbl = AddRow(tbl, cookie, Request.Cookies(cookie)) Else For Each key in Request.Cookies(cookie) tbl = AddRow(tbl, cookie & "(" & key & ")", Request.Cookies(cookie)(key)) Next End If Next tbl = MakeTable(tbl) if Request.Cookies.count tmp = replace(replace(replace(DivSets(DivSetNo),"#sectname#","COOKIES"),"#title#","COOKIES"),"#data#",tbl) Response.Write replace(tmp,"|", vbcrlf) end sub '*********************************************************** '* PrintSummaryInfo '*********************************************************** Private Sub PrintSummaryInfo(byval DivSetNo) dim tmp, tbl tbl = AddRow(tbl, "Time of Request",dbg_RequestTime) tbl = AddRow(tbl, "Elapsed Time",DateDiff("s", dbg_RequestTime, dbg_FinishTime) & " seconds") tbl = AddRow(tbl, "Request Type",Request.ServerVariables("REQUEST_METHOD")) tbl = AddRow(tbl, "Status Code",Response.Status) tbl = AddRow(tbl, "Script Engine",ScriptEngine & " " & ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion & "." & ScriptEngineBuildVersion) tbl = MakeTable(tbl) tmp = replace(replace(replace(DivSets(DivSetNo),"#sectname#","SUMMARY"),"#title#","SUMMARY INFO"),"#data#",tbl) Response.Write replace(tmp,"|", vbcrlf) End Sub '*********************************************************** ''@SDESCRIPTION: Adds the Database-connection object to the debug-instance. To display Database-information ''@PARAM: - oSQLDB [object]: connection-object '*********************************************************** Public Sub GrabDatabaseInfo(byval oSQLDB) dbg_DB_Data = AddRow(dbg_DB_Data, "ADO Ver",oSQLDB.Version) dbg_DB_Data = AddRow(dbg_DB_Data, "OLEDB Ver",oSQLDB.Properties("OLE DB Version")) dbg_DB_Data = AddRow(dbg_DB_Data, "DBMS",oSQLDB.Properties("DBMS Name") & " Ver: " & oSQLDB.Properties("DBMS Version")) dbg_DB_Data = AddRow(dbg_DB_Data, "Provider",oSQLDB.Properties("Provider Name") & " Ver: " & oSQLDB.Properties("Provider Version")) End Sub '*********************************************************** '* PrintDatabaseInfo '*********************************************************** Private Sub PrintDatabaseInfo(byval DivSetNo) dim tbl tbl = MakeTable(dbg_DB_Data) tbl = replace(replace(replace(DivSets(DivSetNo),"#sectname#","DATABASE"),"#title#","DATABASE INFO"),"#data#",tbl) Response.Write replace(tbl,"|", vbcrlf) End Sub '*********************************************************** '* PrintCollection '*********************************************************** Private Sub PrintCollection(Byval Name, ByVal Collection, ByVal DivSetNo, ByVal ExtraInfo) Dim vItem, tbl, Temp For Each vItem In Collection if isobject(Collection(vItem)) and Name "SERVER VARIABLES" and Name "QUERYSTRING" and Name "FORM" then tbl = AddRow(tbl, vItem, "{object}") elseif isnull(Collection(vItem)) then tbl = AddRow(tbl, vItem, "{null}") elseif isarray(Collection(vItem)) then tbl = AddRow(tbl, vItem, "{array}") else if dbg_AllVars then tbl = AddRow(tbl, "" & vItem & "", server.HTMLEncode(Collection(vItem))) elseif (Name = "SERVER VARIABLES" and vItem "ALL_HTTP" and vItem "ALL_RAW") or Name "SERVER VARIABLES" then if Collection(vItem) "" then tbl = AddRow(tbl, vItem, server.HTMLEncode(Collection(vItem))) ' & " {" & TypeName(Collection(vItem)) & "}") else tbl = AddRow(tbl, vItem, "...") end if end if end if Next if ExtraInfo "" then tbl = tbl & "" & ExtraInfo tbl = MakeTable(tbl) if Collection.count tbl = replace(replace(DivSets(DivSetNo),"#title#",Name),"#data#",tbl) tbl = replace(tbl,"#sectname#",replace(Name," ","")) Response.Write replace(tbl,"|", vbcrlf) End Sub '*********************************************************** '* AddRow '*********************************************************** Private Function AddRow(byval t, byval var, byval val) t = t & "|||" & var & "|= " & val & "|" AddRow = t End Function '*********************************************************** '* MakeTable '*********************************************************** Private Function MakeTable(byval tdata) tdata = "|" + tdata + "|" MakeTable = tdata End Function '*********************************************************** ''@SDESCRIPTION: Draws the Debug-panel '*********************************************************** Public Sub draw() If dbg_Enabled Then dbg_FinishTime = Now() Dim DivSet, x DivSet = split(dbg_Show_default,",") dbg_Show = split(dbg_Show,",") For x = 0 to ubound(dbg_Show) divSet(x) = dbg_Show(x) Next Response.Write "Debugging-console:" Call PrintSummaryInfo(divSet(0)) Call PrintCollection("VARIABLES", dbg_Data,divSet(1),"") Call PrintCollection("QUERYSTRING", Request.QueryString(), divSet(2),"") Call PrintCollection("FORM", Request.Form(),divSet(3),"") Call PrintCookiesInfo(divSet(4)) Call PrintCollection("SESSION", Session.Contents(),divSet(5),AddRow(AddRow(AddRow("","Locale ID",Session.LCID & " (&H" & Hex(Session.LCID) & ")"),"Code Page",Session.CodePage),"Session ID",Session.SessionID)) Call PrintCollection("APPLICATION", Application.Contents(),divSet(6),"") Call PrintCollection("SERVER VARIABLES", Request.ServerVariables(),divSet(7),AddRow("","Timeout",Server.ScriptTimeout)) Call PrintDatabaseInfo(divSet(8)) Call PrintCollection("SESSION STATIC OBJECTS", Session.StaticObjects(),divSet(9),"") Call PrintCollection("APPLICATION STATIC OBJECTS", Application.StaticObjects(),divSet(10),"") Response.Write "" End If End Sub 'Destructor Private Sub Class_Terminate() Set dbg_Data = Nothing End Sub End Class %> 类的说明: CLASS debuggingConsole Version: 1.2 -------------------------------------------------------------------------------- Public Properties Property Let Enabled(bNewValue)===[bool] Sets "enabled" to true or false Property Get Enabled===[bool] Gets the "enabled" value Property Let Show(bNewValue)===[string] Sets the debugging panel. Where each digit in the string represents a debug information pane in order (11 of them). 1=open, 0=closed Property Get Show===[string] Gets the debugging panel. Property Let AllVars(bNewValue)===[bool] Sets wheather all variables will be displayed or not. true/false Property Get AllVars===[bool] Gets if all variables will be displayed. -------------------------------------------------------------------------------- Public Methods public sub===Print (label, output) Adds a variable to the debug-informations. public sub===GrabDatabaseInfo (byval oSQLDB) Adds the Database-connection object to the debug-instance. To display Database-information public sub===draw () Draws the Debug-panel -------------------------------------------------------------------------------- Methods Detail public sub===Print (label, output) Parameters: - label [string]: Description of the variable - output [variable]: The variable itself public sub===GrabDatabaseInfo (byval oSQLDB) Parameters: - oSQLDB [object]: connection-object |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|