【问题标题】:Unhandled Exception error line and source function未处理的异常错误行和源函数
【发布时间】:2012-11-16 02:38:29
【问题描述】:

我正在使用 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”参数。我可以使用这种数据类型的跟踪代码吗?我需要将其转换为异常类型吗?还是不可能?

【问题讨论】:

  • 你是如何追踪这个异常的?希望没有消息是好消息,因为它仍然是调试器可以捕获的第一次机会异常。也许回到源代码管理,看看在问题开始发生时对导致问题的特定函数进行了哪些代码更改。

标签: vb.net function exception-handling visual-studio-2012 line-numbers


【解决方案1】:

我没有精通 Vb.Net,但以前我用过下面的代码,也许它可以帮助你 [ex.StackTrace()]

 Try
  'Your Code goes here
 Catch ex As Exception
  MsgBox(ex.StackTrace())
 End Try

【讨论】:

  • 这是一个未处理的异常——他不知道它来自哪里。如果他这样做了,他就可以使用你的答案。
  • 另外,ex.ToString() 是更好的工具。会显示内部异常信息。
【解决方案2】:

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

另一个技巧。订阅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? 对话框。

上面处理unHandled异常的代码有一个参数“e 作为 ApplicationServices.UnhandledExceptionEventArgs”。我可以使用 此数据类型的跟踪代码?

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

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多