Getting VB.NET line numbers in stack trace

亡梦爱人 提交于 2019-11-30 07:27:01

From the documentation of the constructor you're calling:

The StackTrace is created with the caller's current thread, and does not contain file name, line number, or column information.

Try using:

Dim st As StackTrace = New StackTrace(ex, True)

instead, which uses this constructor. The second constructor parameter is described as:

true to capture the file name, line number, and column number; otherwise, false.

This question was solved some time back but I thought I'd share the final working function that I've been including in my projects recently. It returns the initial exception information and full stack trace at that point followed by the line numbers and filenames leading up to the exception from the stack trace.

Public Function GetExceptionInfo(ex As Exception) As String
    Dim Result As String
    Dim hr As Integer = Runtime.InteropServices.Marshal.GetHRForException(ex)
    Result = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & Environment.NewLine & ex.StackTrace & Environment.NewLine
    Dim st As StackTrace = New StackTrace(ex, True)
    For Each sf As StackFrame In st.GetFrames
        If sf.GetFileLineNumber() > 0 Then
            Result &= "Line:" & sf.GetFileLineNumber() & " Filename: " & IO.Path.GetFileName(sf.GetFileName) & Environment.NewLine
        End If
    Next
    Return Result
End Function

Try using the

public StackTrace(Exception e, bool fNeedFileInfo);

Constructor and setting fNeedFileInfo to true

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!