我正在处理 Windows 窗体的主入口点中的顶级异常。我想访问在我的处理程序中导致异常的调用方法/程序集。我有一种感觉,我将不得不为此使用跟踪,但我不确定在哪里。
Module Program
Sub Main()
Try
AddHandler AppDomain.CurrentDomain.UnhandledException, Function(sender, e) ExceptionHandler.Handle(sender, DirectCast(e.ExceptionObject, Exception))
AddHandler Application.ThreadException, Function(sender, e) ExceptionHandler.Handle(sender, e.Exception)
Application.Run(ApplicationBase)
Catch ex As Exception
MessageBox.Show("Handled Exception")
End Try
End Sub
End Module
Public Class ApplicationBase
Public Sub MethodA()
'Causes an exception
File.ReadAllLines("")
End Sub
End Class
Public Class ExceptionHandler
Public Shared Function Handle(sender As Object, e As Exception)
Dim t As Type = sender.GetType()
'Retrieve the calling method here?
Dim callingMethod = "MethodA"
Return True
End Function
End Class
作为发送者通过的对象是一个线程,我试图查看这是否是调用导致异常的程序集/对象类型。
我的问题是,如果可能的话,如何从“句柄”方法中获取方法名称/信息并推送对象名称/程序集?
编辑:
虽然 e.ToString() 将显示方法名称 - 我正在寻找对方法信息列表/程序集/引发异常的类型(如反射)的访问,然后我可以获得 .DLL 的版本号等 -我可能在这里做梦,但我想知道这是否可能?
编辑2:
我尝试了 e.TargetSite,它对于 MethodA() 异常返回 File.ReadAllLines() 的方法信息我正在寻找导致异常的 Class 方法,因此方法信息将是 MethodA - 虽然这比我要接近得多我想我会得到。