簡體   English   中英

PHP的debug_backtrace的VBScript替代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM