Frage

Ich bin auf der Suche nach einer besseren Lösung als das, was wir müssen derzeit mit unerwarteten Produktionsfehlern behandeln, ohne das Rad neu zu erfinden.

Eine größere Anzahl unserer Produkte sind WinForm und WPF-Anwendungen, die an entfernten Standorten installiert sind. Zwangsläufig unerwartete Fehler auftreten, von NullReferenceExceptions zu ‚Allgemeinem Netzwerkfehler‘. So reicht von Programmierfehlern für die Umweltprobleme.

Zurzeit werden diese alle unbehandelten Ausnahmen verwenden log4net protokolliert und dann per E-Mail an uns zurück für Analyse . Allerdings fanden wir, dass manchmal diese Fehler ‚Berichte‘ zu wenig Informationen enthalten, um das Problem zu identifizieren.

In diesen Berichten benötigen wir folgende Informationen:

  1. Anwendungsname
  2. Anwendungsversion
  3. Workstation
  4. Vielleicht Schuss ein Bildschirm
  5. Ausnahmedetails
  6. Betriebssystem
  7. Erhältlich RAM
  8. Laufende Prozesse
  9. Und so weiter ...

Ich will nicht wirklich das Rad neu erfinden, indem diese von Grund auf neu zu entwickeln. Komponenten, die erforderlich sind:

  1. Fehlersammlung (Details siehe oben)
  2. Fehler 'Absender' (erforderlich Queuing, wenn DB oder Internet nicht erreichbar ist)
  3. Fehlerdatenbank
  4. Analyse und Berichterstattung über diese Fehler. Z.B. 10 häufigsten Fehler oder Timeouts auftreten 16.00 bis 05.00 Uhr. Wie vergleichen die Fehler zwischen Version x und y?

Hinweis: Wir sahen uns an Smartassembly als eine mögliche Lösung, aber obwohl in der Nähe hat es nicht ganz unsere Bedürfnisse erfüllt und ich hatte gehofft, zu hören, was andere Entwickler tun, und wenn einige Alternativen zur Verfügung stehen.

Edit: Vielen Dank für die bisher Antworten. Vielleicht war ich in meiner ursprünglichen Frage nicht klar, das Problem ist nicht, wie alle unhanded Ausnahmen zu fangen, sondern, wie man mit ihnen umgehen und einer Reporting-Engine (Analyse), um sie zu erstellen.

War es hilfreich?

Lösung

Ich würde Jeff Atwood Artikel vorschlagen User Friendly Ausnahmebehandlung rel="nofollow, was tut das meiste, was Sie fragen bereits (Application Info, Screenshot, Ausnahmedetails, OS, Logging-Dateien und E-Mail in Text) und enthält den Quellcode, so dass Sie das zusätzliche Material addiere Sie benötigen.

Andere Tipps

Sie können auf die nicht behandelte Ausnahme Ereignis zuordnen und melden Sie es / prallte gegen einen webservice / etc.

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

Ich fand auch die Code-Schnipsel mit AppDomain statt Thread:

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

Hier finden Sie einige Dokumentation darauf: AppDomain Unhandle Ausnahme

Außerhalb von nur Umgang es selbst, es nicht wirklich eine generische Art und Weise, dies zu tun, das wiederverwendbar ist, muss es wirklich richtig mit der Schnittstelle der Anwendung integriert werden, aber man kann ein Webservice-Setup, das Anwendungsname nimmt, Ausnahme, und alle, die gute Material und haben einen zentralen Punkt für alle Ihre Anwendungen.

Sie möchten möglicherweise die Fehlerberichtsfunktion in Omea Reader der JetBrain gebaut studieren. Es hat ein allumfassendes Fehlerbehandlungskomponente, die einen Dialog erscheint, wenn ein unerwarteter Fehler auftritt. Der Benutzer kann mehr Details, bevor das Problem zu JetBrain öffentlichen fehlern Sammlung Web-Service einreichen.

Sie haben Omea Open Source die Gemeinschaft zu ermöglichen, die .NET 1.1-Codebasis zu aktualisieren, um v2 oder 3. http://www.jetbrains.net/confluence/display/OMEA/this+ Link

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top