How to use Stacktrace to return Error Line Number in vb.net

后端 未结 7 1084
名媛妹妹
名媛妹妹 2021-02-05 20:08

I am trying to create some sort of error catching method that will return the error line number. We have an abort email that is sent out when a process aborts that gives us the

相关标签:
7条回答
  • 2021-02-05 20:44

    I have adapted an example from other forum, in my case, I wasn't getting the line number where the error was caused, so I started playing around and found a solution, the code is as follows:

    Public Class Form1
        Private Sub a2()
            Dim b As Integer = 0
            Dim a As Integer = 1 / b
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
            Try
                a2()
            Catch ex As Exception
                Dim st As New StackTrace(True)
                st = New StackTrace(ex, True)
                MessageBox.Show("Line: " & st.GetFrame(0).GetFileLineNumber().ToString, "Error")
            End Try
        End Sub
    End Class
    

    In this example, line 4 will trigger the error exception, but once I applied the principle in a real life application, line was 0, so I started playing with the index in the GetFrame property, it ranges from 0 to 4, when I put 4 in the object, EUREKA, I got the line number causing the problem.

    0 讨论(0)
  • 2021-02-05 20:45
        Try
            Dim x As Integer
            x = " "
    
        Catch ex As Exception
            Dim trace = New Diagnostics.StackTrace(ex, True)
            Dim line As String = Strings.Right(trace.ToString, 5)
            Dim nombreMetodo As String = ""
            Dim Xcont As Integer = 0
    
            For Each sf As StackFrame In trace.GetFrames
                Xcont = Xcont + 1
                nombreMetodo = nombreMetodo & Xcont & "- " & sf.GetMethod().ReflectedType.ToString & " " & sf.GetMethod().Name & vbCrLf
            Next
    
            MessageBox.Show("Error en Linea number: " & line & ex.Message & vbCrLf & "Metodos : " & vbCrLf & nombreMetodo)
    
        End Try
    
    0 讨论(0)
  • 2021-02-05 20:45

    You should definitely use the stack trace, since you can use a global exception catching mechanism that you will need to code only once.

    To get the exact line on which the error was thrown, you will need to ship the pdb files with your application. Those pdb files contain debug information, including the error's line number.

    If you want to know how to catch unhandled exceptions gracefully, have a look at this codeproject article.

    0 讨论(0)
  • 2021-02-05 20:53
        Try
            Dim x As Integer
            x = " "
    
        Catch ex As Exception
            Dim trace = New Diagnostics.StackTrace(ex, True)
            Dim line As String = Strings.Right(trace.ToString, 5)
            Dim nombreMetodo As String = ""
    
            For Each sf As StackFrame In trace.GetFrames
                nombreMetodo = sf.GetMethod().Name & vbCrLf
            Next
    
            MessageBox.Show("Error en Linea number: " & line & vbCrLf & ex.Message & vbCrLf & "Metodos : " & nombreMetodo)
        End Try
    
    0 讨论(0)
  • 2021-02-05 20:54

    You can use the StackTrace to retrieve the line number on an error.

    Try 
        'Put your code here
    
    Catch ex As Exception
        Dim trace = New Diagnostics.StackTrace(ex, True)
        Dim line As String = Right(trace.ToString, 5)
        MessageBox.Show("'" & ex.Message & "'" & " Error in- Line number: " & line)
    
    End Try
    
    0 讨论(0)
  • 2021-02-05 21:02

    If you wish to remain using On Error Goto then simply copy and paste your code into a programmers editor like UltraEdit and insert all the line numbers in a single column editing operation. Make sure you highlight the first column then use Column/Insert Number...

    Then copy and paste that back into your procedure. Voila except the first case after a select case statement. Remove the line numbers you inserted from the first case entry after every select case.

    0 讨论(0)
提交回复
热议问题