none
Programmabsturz festhalten

    Frage

  • Hallo.

    Gibt es eine Möglichkeit Programmabstürze in ner Log File festzuhalten? Sprich mit genauen Fehlerdetails usw. Ich nutze WPF und C#

    MfG
    Giraffe

    Freitag, 21. Februar 2014 15:31

Antworten

  • Hallo,
    zunächst solltest du alle "gefährlichen" Stellen in try...catch-Blöcke packen. Dann kannst du im Catch-Block die behandelbaren Fehler abfangen und verarbeiten. Bei nicht behandelbaren Fehlern bringt es je nach Fehler nichts das Programm noch weiter laufen zu lassen. Du solltest es also abstürtzen lassen.
    Für Fehler, die du nicht vorher gesehen hast, kannst du in WPF das DispatcherUnhandledException-Event in der App.xaml abonnieren:
    <Application x:Class="WpfApplication82.App"
                 ...
    DispatcherUnhandledException="Application_DispatcherUnhandledException">
    Aus den EventArgs erhälst du das Exception-Objekt und kannst deine Fehlerinfos abspeichern:
    private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {
        using (TextWriter tw = new StreamWriter(@"C:\EinOrtAnDemDuSchreibrechteHast\meinprogramm.log"))
        {
            tw.WriteLine("Unhandled exception: " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
            tw.WriteLine(e.Exception.StackTrace); //Beispielswiese den Stacktrace schreiben
        }
    }
    Du musst natürlich sicher stellen, das du auch eine Datei abspeichern darfst (Schreibrechte hast). Sonst endet das Fehlerloggen im Fehler.



    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert TZDEV Freitag, 21. Februar 2014 15:45
    Freitag, 21. Februar 2014 15:44

Alle Antworten

  • Hallo,
    zunächst solltest du alle "gefährlichen" Stellen in try...catch-Blöcke packen. Dann kannst du im Catch-Block die behandelbaren Fehler abfangen und verarbeiten. Bei nicht behandelbaren Fehlern bringt es je nach Fehler nichts das Programm noch weiter laufen zu lassen. Du solltest es also abstürtzen lassen.
    Für Fehler, die du nicht vorher gesehen hast, kannst du in WPF das DispatcherUnhandledException-Event in der App.xaml abonnieren:
    <Application x:Class="WpfApplication82.App"
                 ...
    DispatcherUnhandledException="Application_DispatcherUnhandledException">
    Aus den EventArgs erhälst du das Exception-Objekt und kannst deine Fehlerinfos abspeichern:
    private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {
        using (TextWriter tw = new StreamWriter(@"C:\EinOrtAnDemDuSchreibrechteHast\meinprogramm.log"))
        {
            tw.WriteLine("Unhandled exception: " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
            tw.WriteLine(e.Exception.StackTrace); //Beispielswiese den Stacktrace schreiben
        }
    }
    Du musst natürlich sicher stellen, das du auch eine Datei abspeichern darfst (Schreibrechte hast). Sonst endet das Fehlerloggen im Fehler.



    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert TZDEV Freitag, 21. Februar 2014 15:45
    Freitag, 21. Februar 2014 15:44
  • Wie abonniere ich das Event DispatcherUnhandledException?
    Wenn ich die App.xaml wie oben erweitre und die die Event-Abo-Methode in meine MainWindow.xaml.cs implementiere, so erhalte ich die Fehlermeldung

    'Meine.App' enthält keine Definition für 'Application_DispatcherUnhandledException', und es konnte keine Erweiterungsmethode 'Application_DispatcherUnhandledException' gefunden werden, die ein erstes Argument vom Typ 'Meine.App' akzeptiert (Fehlt eine Using-Direktive oder ein Assemblyverweis?). 
    D:\...\App.xaml 5 125

    Grüße,
    von Frank


    www.energiewende-mach-ich-selbst.de

    Donnerstag, 14. Juli 2016 13:24
  • Ach klar. 
    In der App.xaml.cs...

    www.energiewende-mach-ich-selbst.de

    Donnerstag, 14. Juli 2016 13:34