2015-01-20 50 views
0

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

+0

威尔[Request.ServerVariables( “SCRIPT_NAME”)](https://msdn.microsoft.com/en-in/library/ms524602%28v=vs.90%29.aspx)帮助?它会显示正在执行的文件的名称(不是包含文件的名称) – SearchAndResQ 2015-01-22 06:41:28

+0

......好的思维,thx。但只给我当前的脚本页面名称,而不是来自其他地方的实际函数调用引用。 – Milan 2015-01-22 17:48:17

回答

0

如果发生错误,VBScript不会引发堆栈跟踪信息的任何异常。

@Runtime,万一发生错误,VBScript会抛出一个Err对象。例如:

例如:下面的脚本会抛出'除以零'错误&脚本不会被执行得更远。

Msgbox 5/0 
Msgbox "Hello" 'This will not execute 

上的错误

VBScript使用 '上的错误继续下一步',这将启动错误处理程序语句。这意味着,如果错误只是跳过当前行并转到下一行。 '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 
+0

谢谢,事情是我没有错误,我只是有异常大量的函数调用,造成不可接受的开销。一些函数似乎在循环中被调用。由于该项目相当庞大,我不得不对100个文件进行分类,以确定它从哪里被调用。所以不幸的是,我没有任何错误,我可以去(这太容易了:) – Milan 2015-01-20 21:05:45

+0

'MsgBox()'不会在经典ASP中使用'Response.Write()'代替。这些示例假定您编写独立的VBScript或客户端VBScript。实际上使用它会导致一个异常本身隐藏实际问题。 – Lankymart 2015-01-20 22:33:55

+0

@Lankymart ...那我怎么用它?假设我在函数中插入response.write(“message”)语句并运行应用程序。我将在屏幕上方显示23条“消息”,我知道它被称为23次,但我仍然不知道从哪里... – Milan 2015-01-20 23:21:58

-1

您需要配置IIS发送错误浏览器。它在IIS 7 - 8上的经典ASP设置下。您可以选择在本地请求或所有请求上向浏览器发送错误。通常用于本地的开发箱测试。它会告诉你什么行号你错过了。

至于获得更多关于哪些功能会减慢应用程序的细节。使用经典的asp,您需要编写自己的时间代码来衡量这些指标。

在这一点上
1

所以,很多的搜索后,我会回答我的问题如下: VBScript是比较老的语言,似乎不具有任何内置函数/法或其他方法都将可靠地返回函数调用(类似PHP的debug_backtrace的堆栈跟踪()功能。

我设法用一个简单的自定义功能logBreakPointToFile跟踪执行路径()我写的,我放在整个的100S .asp文件(直接和间接地引用所涉及的方法 - 嵌套)。这给了我一个非常混乱的想法实际发生。然而,花费我很多的准备。时间和清理时间,这是我首先想要避免的。

如果有人找到更好的解决方案,请分享。

THX