.net - .NET 全局未捕获的异常处理程序

  显示原文与译文双语对照的内容
64 1

我有一个带有一些dll扩展的程序,它们在运行时加载。前端是一个WinForms中的CefSharp 。but,我需要在一个远离uncaught的客户商店运行代码,我需要一个全局异常处理程序来处理这些异常并记录这些异常,以进行分析。

我已经在搜索解决方案和教程,但没有什么适合我。

只启动另一个程序集( 然后给他 form ) 和这里程序集"这是不是"。比如 将CefSharp浏览器添加到表单。

我试图添加一个方法来处理Handles Me.UnhandledException, MyBase.UnhandledException, MyClass.UnhandledException在 ApplicationEvents.vb 中

Namespace My 
 Partial Friend Class MyApplication
 Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
 Me.MinimumSplashScreenDisplayTime = 0
 AddHandler My.Application.UnhandledException, AddressOf UnhandledExceptionHandler
 Return MyBase.OnInitialize(commandLineArgs)
 End Function
 Public Sub UnhandledExceptionHandler(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException, MyBase.UnhandledException, MyClass.UnhandledException
 Dim errstr = $"Message: {vbNewLine}
 {e.Exception.Message}{vbNewLine}
 {vbNewLine}
 InnerMessage: {vbNewLine}
 {e.Exception.InnerException.Message}{vbNewLine}
 {vbNewLine}
 Stacktrace: {vbNewLine}
 {e.Exception.StackTrace.ToString()}{vbNewLine}"
 MsgBox($"Aa uncaught exception was thrwon! {vbNewLine} {vbNewLine} {errstr}")
 End Sub
 End Class
End Namespace

但是这个方法 UnhandledExceptionHandler 永远不会被调用,即使抛出在调试器中被标记为未捕获的异常,并且导致调试暂停。

所以如果我的问题不清楚:谁能帮我或者者解释我,我犯了错误,我可以能会犯错误的假设,或者者这样的异常处理程序。

在 Visual Studio 2017的VB.Net 中

时间:原作者:0个回答

121 2

下面是我所做的,证明它应该正常工作:

  • 创建新的WinForms项目。
  • Button 添加到窗体并处理它的Click 事件。
  • 将代码添加到将引发异常的事件处理程序中,比如IO.File.OpenRead("this file does not exist")
  • 打开项目属性的应用程序页,然后单击'查看应用程序事件'按钮。
  • 在代码窗口顶部的中间下拉框中选择'( MyApplication事件),然后在右下拉列表中选择 UnhandledException drop 。
  • 将一些通知代码添加到事件处理程序中,比如MessageBox.Show(e.Exception.ToString())
  • 按F5在调试器中运行项目并单击 Button请注意,调试器将向你通知异常。
  • 按Ctrl+F5运行应用程序而不调试,然后单击 Button注意,你的通知代码被执行。
原作者:
...