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())
您的答案听起来不错,但没有奏效。我遵循了指示,并且断点从未被击中。在这种情况下,异常处理程序使用StackTrace方法以及建议的.ToString方法显示行号信息,但我相信这个建议可能是一个很好的建议。 – ChadD 2009-09-09 20:01:11
2分钟我的视频按照你的指示 – ChadD 2009-09-09 20:04:55
忘记发布URL:http://screencast.com/t/ZPv00EOrCnTl – ChadD 2009-09-09 20:05:27