全局未捕获异常处理程序

时间:2018-01-05 06:41:40

标签: .net vb.net exception-handling cefsharp uncaught-exception

我有一个带有一些DLL扩展的程序,它们在运行时加载。前端是WinForms中的CefSharp。但程序已经很大了,使用了其他一些第三方代码部分(我无法处理)并且该程序必须在远程客户商店运行而无需永久维护,我需要一个全局异常处理程序对于未捕获的异常,处理这些异常并将其记录下来进行分析。

我已经真正寻找过解决方案和教程,但没有什么对我有用。

mainform只是启动另一个程序集(并给他表单对象),这个程序集“就是这样”。例如将CefSharp-Browser添加到表单中。

我尝试在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

但是永远不会调用此方法 CloseableHttpClient httpclient = HttpClients.createDefault(); // Create a local instance of cookie store CookieStore cookieStore = new BasicCookieStore(); // Create local HTTP context HttpClientContext localContext = HttpClientContext.create(); // Bind custom cookie store to the local context localContext.setCookieStore(cookieStore); //Your PUT request goes here CloseableHttpResponse response = httpClient.execute(putRequest,localContext); ,即使在调试器中被标记为未捕获的抛出异常并导致调试暂停。

所以,如果我的问题不明确:任何人都可以帮助我,或者可以向我解释,我犯了哪个错误,我可能在哪里做出错误的假设,或者这样一个未被捕获的异常处理程序是如何工作的。

在Visual Studio 2017的vb.net中

1 个答案:

答案 0 :(得分:0)

这就是我刚才所做的,以证明它能够正常运作:

  1. 创建一个新的WinForms项目。
  2. 在表单中添加Button并处理其Click事件。
  3. 将代码添加到将引发异常的事件处理程序,例如IO.File.OpenRead("this file does not exist")
  4. 打开项目属性的“应用程序”页面,然后单击“查看应用程序事件”。按钮。
  5. 选择'(我的应用事件)'在代码窗口顶部的中间下拉列表中,然后在最右侧的下拉列表中选择UnhandledException。
  6. 向事件处理程序添加一些通知代码,例如MessageBox.Show(e.Exception.ToString())
  7. 按F5在调试器中运行项目,然后单击Button。请注意,调试器会通知您异常。
  8. 按Ctrl + F5运行应用程序而不进行调试,然后单击Button。请注意,您的通知代码已执行。