【问题标题】:WPF App: Uncatchable Exception?WPF 应用程序:无法捕获的异常?
【发布时间】:2015-01-19 04:34:08
【问题描述】:

我的 App.xaml.cs 中有这些行,用于全局捕获异常:

this.Dispatcher.UnhandledException += new
    DispatcherUnhandledExceptionEventHandler(
        Current_DispatcherUnhandledException);
AppDomain.CurrentDomain.UnhandledException += new
    UnhandledExceptionEventHandler(
        CurrentDomain_UnhandledException);
Application.Current.DispatcherUnhandledException += new
    DispatcherUnhandledExceptionEventHandler(
        Current_DispatcherUnhandledException);

可以捕获大多数异常并生成日志文件,以便我知道导致错误的原因。但是在我客户的 PC 上(只有 windows 8 有 这个问题),WPF应用程序有时会崩溃但我无法获取异常日志,这意味着上面的异常处理程序没有被调用。

我可以设置任何处理程序来捕获异常吗?或者是否有任何日志收集器/阅读器,如适用于 Windows/WPF 应用的 android DDMS?

谢谢!

【问题讨论】:

  • 您是否针对特定异常调试过代码?或者您可以参考应用程序崩溃弹出窗口中的异常堆栈。您还可以在事件查看器中查看异常堆栈。
  • 有一些方法可以使程序崩溃而不涉及抛出托管异常。不幸的是,您的问题中没有足够的细节来了解具体问题是什么,以及认为您可以捕获实际发生的任何错误是否现实。
  • 另一个无法捕获的异常是 StackOverflowException
  • 如果您的异常处理程序没有捕获到错误信息,请查看Windows Event Viewer->Windows Logs->Application
  • 参见stackoverflow.com/questions/4223470/… 处理非托管异常

标签: c# wpf exception


【解决方案1】:

从 .NET 4.0 开始,您可以尝试 HandleProcessCorruptedStateExceptionsAttribute 此属性允许您处理自 .NET 4 终止进程的异常。这是相当危险的,因为您允许进程继续(处理异常),即使其内存已损坏。

一般情况下:在捕获此类异常后不要信任应用程序。记录异常并停止应用程序。只有当您知道导致异常的原因并且确定应用程序可以恢复时,您才能将此属性应用于方法并使其恢复正常执行。

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2010-10-29
    相关资源
    最近更新 更多