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:
MethodA() 例外に対して File.ReadAllLines() のメソッド情報を返す e.TargetSite を試しました。例外を引き起こす Class メソッドを探しているので、メソッド情報は MethodA になります - これは私よりもずっと近いですが私が得るであろう考えの。