[英]VBScript alternative of PHP's debug_backtrace
我有一個舊的VBScript項目需要調試,由於它的復雜性,我看不到從哪里調用某些函數。 有沒有VBScript替代PHP的debug_backtrace函數或類似的方法來查看堆棧跟蹤?
因此,在這一點上,經過大量搜索之后,我將回答以下問題: VBScript是一種相對古老的語言,似乎沒有任何內置函數/方法或其他方法可以可靠地返回堆棧跟蹤函數調用(類似於PHP的debug_backtrace()函數。
我設法編寫了一個簡單的自定義函數logBreakPointToFile()來跟蹤執行路徑,並放置了整個數百個.asp文件(在直接或間接引用有問題的方法的任何地方嵌套)。 這給了我一個非常混亂的想法,實際上正在發生什么。 但是花了我很多准備。 最初我想避免的時間和清理時間。
如果有人找到更好的解決方案,請分享。
謝謝
如果發生錯誤,VBScript不會在堆棧跟蹤信息中引發任何異常。
@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
您需要配置IIS才能將錯誤發送到瀏覽器。 在IIS 7-8上的“經典ASP設置”下,您可以選擇將本地請求或所有請求的錯誤發送到瀏覽器。 為了在開發盒上進行測試,通常將其設置為本地。 它將告訴您錯誤的行號。
至於更多有關什么功能正在減慢您的應用程序速度的信息。 使用經典的ASP,您需要編寫自己的計時代碼來測量此類指標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.