我有一个旧的 VBScript 项目我需要调试,由于它的复杂性,我无法看到从哪里调用某些函数。是否有任何 VBScript 替代PHP的 debug_backtrace 功能或类似功能,以查看堆栈跟踪?
答案 0 :(得分:1)
所以在这一点上,经过大量的搜索,我将回答我自己的问题如下: VBScript是比较老的语言,似乎没有任何内置函数/方法或其他可靠地返回函数调用的堆栈跟踪的方法(类似于PHP的 debug_backtrace()函数。
我设法使用我编写的简单的自定义函数logBreakPointToFile()来跟踪执行路径,并且我放置了整个100个.asp文件(所有方法都直接和间接引用了相关方法) - 嵌套)。这给了我一个非常混乱的想法,实际发生了什么。然而,花了我很多准备。时间和清理时间,我试图首先避免。
如果有人找到更好的解决方案,请分享。
THX
答案 1 :(得分:0)
如果出现错误,VBScript不会抛出任何带有stacktrace信息的异常。
@Runtime,如果出现错误,VBScript会抛出一个 Err 对象。
例如:下面的脚本会抛出零除零。错误&脚本不会被进一步执行。
Msgbox 5/0
Msgbox "Hello" 'This will not execute
出错:
VBScript使用' On Error Resume Next'启动错误处理程序的语句。这意味着,如果出现错误,只需跳过当前行并转到下一行。 ' On Error GoTo 0'禁用当前错误处理程序。 (就像你正在关闭一个' if'块)。请查看 MSDN 了解详情。
考虑这个例子。
On Error Resume Next
Msgbox 5/0
Msgbox "Hello" 'This will say "Hello"
Msgbox Err.Number '11
Msgbox err.Description 'division by zero
On Error GoTo 0 'stops the error handler. any run time error after this will stop the program
如果没有发现错误,Err.Number将为0。
所以,你可以拥有像
这样的功能Function Divide(ByVal A, ByVal B)
On Error Resume Next
Dim Result
Result = A/B
If Err.Number = 0 Then
Divide = Result
Else
Divide = "Infinite"
End If
On Error GoTo 0
End function
请记住这一点 - 因为它只是在出现错误时转到下一行,
On Error Resume Next
If 5/0 Then
Msgbox "???" 'This will get executed. It does not go to Else
Else
Msgbox "Hello" 'It will not show this
End If
On Error GoTo 0
答案 2 :(得分:-1)
您需要配置IIS以向浏览器发送错误。它在IIS 7 - 8下的经典ASP设置下。您可以选择在本地请求或所有请求上向浏览器发送错误。对于在开发盒上进行测试,通常将其设置为本地。它会告诉你错误的行号。
至于详细了解哪些功能会降低您的应用程序速度。使用经典的asp,您需要编写自己的计时代码来衡量这些指标。