您的位置:首页精文荟萃软件资讯 → ASP中令人震撼的Debug类(VBScript)

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

时间:2004/10/7 18:30:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



            译者的话:

不知道用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 <= 0 then DivSetNo = 2
   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 <= 0 then DivSetNo =2
     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

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本