首页 电脑 电脑学堂 查看内容

ASP中令人震撼的Debug类(VBScript)

2004-9-29 20:05 586 0

摘要: 译者的话: 不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法“response.write ”,然后输出相关的语句来看看是否...
关键词: 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
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部