PHP的debug_backtrace的VBScript替代品

时间:2015-01-20 19:48:40

标签: vbscript asp-classic

我有一个旧的 VBScript 项目我需要调试,由于它的复杂性,我无法看到从哪里调用某些函数。是否有任何 VBScript 替代PHP的 debug_backtrace 功能或类似功能,以查看堆栈跟踪?

3 个答案:

答案 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,您需要编写自己的计时代码来衡量这些指标。