当前位置:首页>>软件教程>>新闻内容  
ASP中令人震撼的Debug类(VBScript)
作者:asilas(翻译) 发布时间:2003-12-17 11:22:23 | 【字体:

译者的话:

不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法“response.write ”,然后输出相关的语句来看看是否正确。前几天写了一个千行的页面,里面大概有七八个SUB/FUNCTION,调试的时候用了有三十几个response.write ,天,调试完后把这三十个一个个删除,累!

今天看到一个ASP中的Debug类(VBS),试用了一下,绝!

使用方法很简单:

test.asp

<!--#INCLUDE FILE="debuggingConsole.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) = "<TR><TD style='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';}""><DIV id=sect#sectname# style=""font-weight:bold;cursor:hand;background:#7EA5D7;color:white;padding-left:4;padding-right:4;padding-bottom:2;"">|#title#|  <DIV id=data#sectname# style=""cursor:text;display:none;background:#FFFFFF;padding-left:8;"" onclick=""window.event.cancelBubble = true;"">|#data#|  </DIV>|</DIV>|"
  DivSets(1) = "<TR><TD><DIV id=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#|  <DIV id=data#sectname# style=""cursor:text;display:block;background:#FFFFFF;padding-left:8;"" onclick=""window.event.cancelBubble = true;"">|#data#|  </DIV>|</DIV>|"
  DivSets(2) = "<TR><TD><DIV id=sect#sectname# style=""background:#7EA5D7;color:lightsteelblue;padding-left:4;padding-right:4;padding-bottom:2;"">|#title#|  <DIV id=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"
 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, "<nobr>" & vItem & "</nobr>", 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 & "<TR><TD COLSPAN=2><HR></TR>" & 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 & "|<TR valign=top>|<TD>|" & var & "|<TD>= " & val & "|</TR>"
  AddRow = t
 End Function
 
 '******************************************************************************************************************
 '* MakeTable
 '******************************************************************************************************************
 Private Function MakeTable(byval tdata)
  tdata = "|<table border=0 style=""font-size:10pt;font-weight:normal;"">" + tdata + "</Table>|"
  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 "<BR><Table width=100% cellspacing=0 border=0 style=""font-family:arial;font-size:9pt;font-weight:normal;""><TR><TD><DIV style=""background:#005A9E;color:white;padding:4;font-size:12pt;font-weight:bold;"">Debugging-console:</DIV>"
   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 "</Table>"
  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


文章来源:csdn
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我