当前位置: 首页 > 图文教程 > 网络编程 > ASP > asp下调试程序的debug类

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

ASP 中的 asp下调试程序的debug类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 102 ::
收藏到网摘: n/a

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