0

私はVS2012 VB.netを使用しています。

例外のエラー行と、例外が発生した関数を計算するためのコードを作成するのを手伝ってもらえますか?

これが私の現在のコードです:

Partial Friend Class MyApplication

    Public exceptionListOfExceptionsToNotPauseOn As New List(Of ApplicationServices.UnhandledExceptionEventArgs)

    Private Sub MyApplication_UnhandledException(sender As Object, e As ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException

        Dim msgboxResult As MsgBoxResult
        Dim booleanExceptionFoundInList As Boolean = False

        'Dim trace As System.Diagnostics.StackTrace = New System.Diagnostics.StackTrace(ex, True)
        'Dim exceptionLineNumber = trace.GetFrame(0).GetFileLineNumber()

        For x = 0 To exceptionListOfExceptionsToNotPauseOn.Count - 1
            If exceptionListOfExceptionsToNotPauseOn(x).Exception.Message = e.Exception.Message Then
                booleanExceptionFoundInList = True
            End If
        Next

        If Not booleanExceptionFoundInList Then
            msgboxResult = MessageBox.Show("An exception error has occured." & vbCrLf & "Error message: " & e.Exception.Message & vbCrLf & "Do you wish to pause on this exception again?", "Exception", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

            If msgboxResult = Microsoft.VisualBasic.MsgBoxResult.No Then
                exceptionListOfExceptionsToNotPauseOn.Add(e)
            End If
        End If

        e.ExitApplication = False

    End Sub
End Class

アップデート

トレース コードのコードは Exception データ型を使用しますが、上記の unHandled 例外を処理するコードには "e As ApplicationServices.UnhandledExceptionEventArgs" のパラメーターがあります。このデータ型でトレース コードを使用できますか? 例外タイプにキャストする必要がありますか? それとも無理ですか?

4

2 に答える 2

0

ここにいくつかのヒントがあります。まず、属性を使用してすべてのメソッドの入口と出口をトレースできる AOP キットであるPostSharpを使用します。これにより、すぐに関数に移動できます。

別のトリック。実際にサブスクライブすると、ThreadExceptionEventHandlerハンドルされていない例外でデバッガーが中断します! したがって、一時的にコメントアウトしてMyApplication_UnhandledExceptionThreadExceptionEventHandler

<STAThread> _
Public Shared Sub Main(args As String())
    Try
        'your program entry point
        Application.ThreadException += New ThreadExceptionEventHandler(Application_ThreadException)
            'manage also these exceptions
    Catch ex As Exception
    End Try
End Sub

Private Sub Application_ThreadException(sender As Object, e As ThreadExceptionEventArgs)
    ProcessException(e.Exception)
End Sub

もう 1 つの秘訣は、デバッガーで実行しないことです。デバッガーは何らかの理由で例外をマスクしています。アプリを通常どおり ( Ctrl+ F5) 実行すると、通常のUnhandled exception has occurred in your application... Continue/Quit?ダイアログが表示されます。

上記の unHandled 例外を処理するためのコードには、「e As ApplicationServices.UnhandledExceptionEventArgs」というパラメーターがあります。このデータ型でトレース コードを使用できますか?

いいえ。UnhandledExceptionEventArgs でトレース コード データ型を簡単に使用することはできません。MyApplication_UnhandledException1 つのアイデアは UnhandledExceptionEventArgs から継承するクラスを作成することかもしれませんが、特別な型で関数を呼び出す方法ExceptionがわかりませんUnhandled

于 2012-11-16T05:30:48.450 に答える
0

私はVb.Netでマスターしていませんが、以前は以下のコードを使用していました.[ex.StackTrace()]

 Try
  'Your Code goes here
 Catch ex As Exception
  MsgBox(ex.StackTrace())
 End Try
于 2012-11-16T03:20:13.367 に答える