捕获应用程序崩溃事件

Posted

技术标签:

【中文标题】捕获应用程序崩溃事件【英文标题】:Catching application crash events 【发布时间】:2012-05-18 03:35:29 【问题描述】:

我在 VB.Net 中做了一个应用程序。但是有些用户在启动时会遇到崩溃。那就是“一个问题导致该程序无法正常工作”,只需一个按钮“关闭程序”。由于应用加载时发生了很多事情,是否有可能知道导致问题的原因?

【问题讨论】:

【参考方案1】:

如果您的项目属性中启用了“应用程序框架”,请单击“应用程序”项目属性页面上的“查看应用程序事件”按钮。然后添加一个事件处理程序:

Partial Friend Class MyApplication
    Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
        ' ...
    End Sub
End Class

如果您不使用应用程序框架,则应在整个 Main 方法周围放置一个 try catch 块。但是,这只会捕获主线程上发生的异常。如果您的应用程序是多线程的,您可以通过创建如下方法来处理来自所有线程的异常:

Public Sub UnhandledExceptionHandler(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
    ' ...
End Sub

然后将其附加到您当前域的UnhandledException 事件中,如下所示:

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler

然后,无论当前线程如何,都会针对您域中任何地方的所有未处理异常调用该事件处理程序。

【讨论】:

非常感谢 SteveDog。现在有没有办法强制未处理的异常来查看错误? 我不确定你的问题是什么。如果抛出异常并且未处理,则 MyApplication_UnhandledException 处理程序应该接收它。我相信您可能在其他线程上有未处理的异常,或者该异常处理程序无法处理的东西,但是在 UI 线程上抛出的任何东西都应该被该处理程序自动捕获。

以上是关于捕获应用程序崩溃事件的主要内容,如果未能解决你的问题,请参考以下文章

java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理

qt崩溃时boost线程中断

为啥使用Try,Catch捕获异常,程序依然Crash

NativeScript 混合移动应用程序:跟踪/捕获崩溃

应用程序在图像捕获中崩溃

NSuncaughtexceptionhandler 没有捕获内存警告崩溃