如何使用Stacktrace在vb.net中返回错误行号

use*_*775 8 vb.net error-handling stack-trace erl

我试图创建一些错误捕获方法,将返回错误行号.我们有一个中止的电子邮件,当一个进程中止时发送给我们err.numbererr.description,但我想知道实际出错的地方.

我知道你可以做到以下几点:

1: code here
2: code here
3: code here
Run Code Online (Sandbox Code Playgroud)

等等,并使用ERL来获取数字,但是输入每一行是相当繁琐的.

有没有办法自动执行此操作,还是更容易使用Stacktrace?如果Stacktrace更好你能告诉我一个例子吗?

小智 15

我已经改编了一个来自其他论坛的例子,在我的情况下,我没有得到错误所在的行号,所以我开始玩游戏并找到了解决方案,代码如下:

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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,第4行将触发错误异常,但是一旦我在实际应用程序中应用了原则,行为0,所以我开始使用GetFrame属性中的索引,它的范围从0到4,当我放4,对象,EUREKA,我得到了引起问题的行号.


Han*_*ant 8

在异常堆栈跟踪中生成行号是CLR的内置功能.但是,您必须提供将代码地址映射到行号所需的信息.切换到项目的发布配置.Project + Properties,Compile选项卡,Advanced Compile Options.将"生成调试信息"设置从pdb-only更改为Full.与您的程序一起部署.pdb文件.

请注意,您获得的行号始终是估计值,因此不要盲目相信您所看到的内容.由于抖动优化器内联方法以及移动代码以使程序运行得更快,映射是不完美的.