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

更新

跟踪代码的代码使用异常数据类型,其中处理未处理异常的代码具有“e As ApplicationServices.UnhandledExceptionEventArgs”参数。我可以使用这种数据类型的跟踪代码吗?我需要将其转换为异常类型吗?还是不可能?

4

2 回答 2

0

这里有几个提示。首先是使用PostSharp,它是一个 AOP 工具包,可让您使用 Attributes 跟踪所有方法的进入和退出。这将直接引导您使用该功能。

另一个技巧。订阅ThreadExceptionEventHandler实际确实会导致调试器在未处理的异常上中断!因此暂时注释掉你的MyApplication_UnhandledException并添加一个ThreadExceptionEventHandler

<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

另一个技巧是不要在调试器下运行。调试器出于某种原因屏蔽了异常。如果您正常运行您的应用程序 ( Ctrl+ F5),您将看到通常的Unhandled exception has occurred in your application... Continue/Quit?对话框。

上面处理未处理异常的代码有一个参数“e As ApplicationServices.UnhandledExceptionEventArgs”。我可以使用这种数据类型的跟踪代码吗?

不可以。您不能轻松地将跟踪代码数据类型与 UnhandledExceptionEventArgs 一起使用。一个想法可能是创建一个继承自 UnhandledExceptionEventArgs 的类,但我不知道您将如何调用MyApplication_UnhandledException具有特殊类型的函数,因为该函数是在 is 时调用ExceptionUnhandled

于 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 回答