Debugging-Informationen mit Error.Backtrace.Join("n") abrufen

(Stand der EN Seite vom 17.03.2024)

Beim Debuggen von Code fangen Sie Fehler ab und verfolgen deren Quelle mit der Eigenschaft Error.Backtrace.

Public Sub Form_Load()

' Ihr Code steht hier...

Catch
  Message.Error(Error.Text & "\nBacktrace:\n" & Error.Backtrace.Join("\n"))
End

Oder...

Public Sub Form_Load()

' Ihr Code steht hier...

Catch
  Debug Error.Text & "\nBacktrace:\n" & Error.Backtrace.Join("\n")
End

Dieser Ansatz könnte weiter verbessert werden, in dem der Fehler nur bei einem Debug-Compilat in einem Dialog angezeigt wird - wie hier demonstriert, während der Fehler bei einem Release-Compilat in eine Log-Datei geschrieben wird. Die Unterscheidung zwischen Debug-Compilat und Release-Compilat könnte durch eine globale statische Konstante realisiert werden.

Public $bDEBUG As Boolean = False
Public $sPath As String = "~/gambas-log.txt"

Public Sub Form_Load()

' Ihr Code steht hier...

Catch
  Dim sError As String = Error.Text & "\nBacktrace:\n" & Error.Backtrace.Join("\n")
  If $bDEBUG Then
    Message.Error(sError)
  Else
    If LogToFile($sPath, "Error", "Meine-Aktuelle-Komponente", sError) = False Then
      ' Etwas wirklich schlimmes ist passiert!
    Endif
  Endif
End


Public Function LogToFile(sPath As String, sCategory As String, sTopic As String, sMessage As String) As Boolean
  Dim hFile As File

  If Exist(sPath) Then
    hFile = Open sPath For Write Append
  Else
    hFile = Open sPath For Write Create
  Endif

  Print #hFile, Now; " | "; sCategory; " | "; sTopic; " | "; Replace$(Replace$(sMessage, "\n", "; "), ":;", ":")
  Close #hFile

  Return True

Catch
  Return False
End