WPF应用程序中未处理的异常会自动崩溃转储文件

时间:2019-05-08 13:01:42

标签: c# wpf

由于Windows在应用程序崩溃时生成的崩溃转储文件对于调试问题非常有用,因此我希望为我的WPF应用程序自动生成这些转储文件。我已经按照this answer中所述配置了Windows。

如果我在WPF应用程序中使用System.Environment.FailFast,则会生成故障转储。但是,如果引发正常异常,则不会生成故障转储。

我已经尝试了几种方法,但是到目前为止没有一种方法可以得到理想的结果:

  • 加入AppDomain.CurrentDomain.UnhandledExceptionCurrent.DispatcherUnhandledExceptionTaskScheduler.UnobservedTaskException。调用这些事件的事件处理程序时,您可以在异常情况下显式调用FailFast并生成故障转储。但是,这有一个问题,即崩溃转储中的堆栈跟踪是从调用FailFast而不是引发异常的地方开始的,因此堆栈本身会丢失所有有价值的信息。
  • 不处理上述事件。但是,在这种情况下,根本不会生成故障转储(WPF为您处理错误吗?)。
  • 从类似的问题看来,Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)可能会有所帮助。但是,WPF无法使用该功能。

目前,我看到可以解决问题的两种方式:

  • 以某种方式调用FailFast并使其恢复原始堆栈跟踪(例如ExceptionDispatchInfo.Capture(exception).Throw(),但仍生成故障转储)。
  • 以某种方式阻止.NET / WPF一起处理异常,因此Windows会看到异常并创建故障转储。

如果有人能告诉我上述两种解决方案中的一种是可以实现的,那就太好了。如果您有完全不同的解决方案仍可以实现原始目标,那当然也很好。

0 个答案:

没有答案