Was ist der beste Weg, Fehler in einer WPF-Anwendung zu erfassen? Ich habe bereits Folgendes zu meiner app.xaml.cs hinzugefügt:
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
var stringBuilder = new StringBuilder();
stringBuilder.AppendFormat("{0}\n", e.Exception.Message);
stringBuilder.AppendFormat(
"Exception behandelt auf dem Haupt-UI-Thread {0}.", e.Dispatcher.Thread.ManagedThreadId);
// Versuch, Daten zu speichern
var result = MessageBox.Show(
"Anwendung muss beendet werden:\n\n" + stringBuilder.ToString() + "\n\nVor dem Beenden speichern?",
"app",
MessageBoxButton.YesNo,
MessageBoxImage.Error);
if (result == MessageBoxResult.Yes)
{
MessageBox.Show(e.Exception.InnerException.ToString());
MessageBox.Show(e.Exception.InnerException.Message.ToString());
}
// Beenden-Code zurückgeben
this.Shutdown(-1);
// Standardmäßige Behandlung von nicht behandelten Ausnahmen verhindern
e.Handled = true;
}
private void Application_Startup(object sender, StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
MessageBox.Show(ex.Message, "Unbehandelte Thread-Ausnahme", MessageBoxButton.OK, MessageBoxImage.Error);
}
Aber ich bekomme immer noch gelegentlich Situationen, in denen die App abstürzt und der Fehler nicht in einem MessageBox angezeigt wird. Wie debugge ich diese Art von Fehlern? Das Ereignisprotokoll von Windows zeigt mir keine nützlichen Informationen an. Und natürlich funktioniert die App im IDE einwandfrei, also hilft das auch nicht wirklich weiter.