use*_*775 8 vb.net error-handling stack-trace erl
我试图创建一些错误捕获方法,将返回错误行号.我们有一个中止的电子邮件,当一个进程中止时发送给我们err.number和err.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,我得到了引起问题的行号.
在异常堆栈跟踪中生成行号是CLR的内置功能.但是,您必须提供将代码地址映射到行号所需的信息.切换到项目的发布配置.Project + Properties,Compile选项卡,Advanced Compile Options.将"生成调试信息"设置从pdb-only更改为Full.与您的程序一起部署.pdb文件.
请注意,您获得的行号始终是估计值,因此不要盲目相信您所看到的内容.由于抖动优化器内联方法以及移动代码以使程序运行得更快,映射是不完美的.