【问题标题】:Wrong line number on stacktrace exception堆栈跟踪异常上的错误行号
【发布时间】:2011-08-10 09:16:54
【问题描述】:

我有一些错误的代码,我正在使用堆栈跟踪来找出行号是什么,但它似乎给了我错误的数字

这是我的代码

Try

    Dim query As String = "Select * from table"
    Dim ds As DataSet = data.db(query)

Catch e As Exception

    Dim st As New StackTrace(True) 'This is the line number it gives me'
    Dim sf As StackFrame = st.GetFrame(0)
    Response.Write(" Method: " & sf.GetMethod().Name)
    Response.Write(" File: " & sf.GetFileName())
    Response.Write(" Line Number: " & sf.GetFileLineNumber().ToString())

End Try

它似乎给了我 StackTrace 开始的行号,而不是导致异常的行号

有什么想法吗?

【问题讨论】:

  • 为什么不用Exception自带的stacktrace?

标签: asp.net vb.net exception stack-trace


【解决方案1】:

如果您特别想要一个 StackTrace 对象,并且不只是想要来自 e.StackTrace 的字符串,那么将您的构造函数调用更改为;

Dim st As New StackTrace(e, True)

“st”现在将按照您的预期使用源详细信息进行初始化。

详情请见http://msdn.microsoft.com/en-us/library/dsay49kt.aspx

【讨论】:

    【解决方案2】:

    为什么不使用 Exception 对象中的信息?

    Catch e As Exception
    
        Response.Write(e.StackTrace)
        Response.Write(" Method: " & e.TargetSite)
        Response.Write(" File: " & e.Source)
    
    End Try
    

    【讨论】:

    • 这给了我完整的 StackTrace 但我只想要行号和文件
    【解决方案3】:

    StackTrace(true) 构造函数为代码中的这一点创建一个新的堆栈跟踪。

    使用异常的.Stacktrace 属性。

    【讨论】:

      【解决方案4】:

      您确实想要异常的 StackTrace 吗?您正在异常处理程序的代码行中创建一个新的堆栈跟踪。

      你想要 e.StackTrace 代替。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-03
        • 2011-01-05
        • 2017-08-06
        • 2010-09-13
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多