Winforms应用程序中使用全局错误处理程序异常处理的问题

问题描述:

我有一个Windows窗体应用程序,它具有全局错误处理程序以显示意外错误。Winforms应用程序中使用全局错误处理程序异常处理的问题

Namespace My 

    Class MyApplication 

     Delegate Sub ProcessParametersDelegate(ByVal sender As Object, ByVal args() As String) 

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

      Dim ErrorText As String = e.Exception.Message & ", " & e.Exception.StackTrace 

      Try      
       MessageBox.Show("Global Error Handler: An unhandled error occurred. It will be copied to your clipboard upon OKing this message: " & ErrorText) 
       Clipboard.SetText(ErrorText) 
      Catch ex As Exception 

      End Try 

     End Sub 

    End Class 

End Namespace 

在VS2008中,我有我的调试 - >设置为默认值,这是对所有未处理的异常引发错误例外选项。

我有几个问题:

1)对同一部署的代码,我有时会行号显示的堆栈跟踪错误信息,有时不这样做,即使错误消息包括我写的源代码而不是引用的二进制文件。该项目使用DEBUG配置进行编译。当发生错误

2)申请奇怪最小化到托盘(我瘦是不可能的,任何人都可以诊断这个问题的w/o我更多的代码贴出来,但我会反正提到它)

3 )当我试图故意引发一个错误,例如,除以零,希望通过全局错误处理程序进行测试时,我从交互式调试器中收到一条对话框错误消息,而不是跳入我的全局错误处理程序(我想调试,因为除了我发布的内容,还有更多。)你有任何想法如何触发并强制执行全局事件处理程序吗?

1)

如果你缺少你的堆栈跟踪的一部分,这可能是因为您是如何忽略内部的异常。

相反的:

Dim ErrorText As String = e.Exception.Message & ", " & e.Exception.StackTrace 

用途:

Dim ErrorText As String = e.Exception.ToString() 

此外,请确保您的.pdb文件被部署到相同的位置,你的.exe文件。

2)不确定。

3)

要通过MyApplication_UnhandledException在调试步骤:

调试 - >不开始调试

调试 - >附加到进程

在“附加查找的程序名称处理“窗口并附加到它。你的断点现在会被击中。

我喜欢用这个给力的异常,但也有很多其他的选择:

MessageBox.Show(Nothing.ToString()) 
+0

您的答案听起来不错,但没有奏效。我遵循了指示,并且断点从未被击中。在这种情况下,异常处理程序使用StackTrace方法以及建议的.ToString方法显示行号信息,但我相信这个建议可能是一个很好的建议。 – ChadD 2009-09-09 20:01:11

+0

2分钟我的视频按照你的指示 – ChadD 2009-09-09 20:04:55

+0

忘记发布URL:http://screencast.com/t/ZPv00EOrCnTl – ChadD 2009-09-09 20:05:27

关于PT 3:

如果一个异常的唯一相关的处理程序是全局异常处理程序,然后调试器会将异常称为“未处理”。从本质上讲,你不能像你正在尝试的那样通过你的全局事件处理程序。

+0

1欧塔三是领奖不够好。 – ChadD 2009-09-09 16:43:09

+0

嗯......我在我的直接窗口中看到这个:警告:无法调试脚本代码。功能错误 – ChadD 2009-09-09 20:07:37