由于Windows在应用程序崩溃时生成的崩溃转储文件对于调试问题非常有用,因此我希望为我的WPF应用程序自动生成这些转储文件。我已经按照this answer中所述配置了Windows。
如果我在WPF应用程序中使用System.Environment.FailFast
,则会生成故障转储。但是,如果引发正常异常,则不会生成故障转储。
我已经尝试了几种方法,但是到目前为止没有一种方法可以得到理想的结果:
AppDomain.CurrentDomain.UnhandledException
,Current.DispatcherUnhandledException
和TaskScheduler.UnobservedTaskException
。调用这些事件的事件处理程序时,您可以在异常情况下显式调用FailFast
并生成故障转储。但是,这有一个问题,即崩溃转储中的堆栈跟踪是从调用FailFast
而不是引发异常的地方开始的,因此堆栈本身会丢失所有有价值的信息。Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
可能会有所帮助。但是,WPF无法使用该功能。目前,我看到可以解决问题的两种方式:
FailFast
并使其恢复原始堆栈跟踪(例如ExceptionDispatchInfo.Capture(exception).Throw()
,但仍生成故障转储)。如果有人能告诉我上述两种解决方案中的一种是可以实现的,那就太好了。如果您有完全不同的解决方案仍可以实现原始目标,那当然也很好。