2015-01-20 22 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