Jo, da ich mal wieder zu viel Zeit habe möchte ich euch in diesem Tutorial Exceptionless vorstellen und anschließend eine Möglichkeit zeigen, wie alle Fehler ohne unzählige Try-Catch-Blöcke abgefangen und zu einer Prozedur umgeleitet werden können.
Aber zuerst ein wenig über Exceptionless.
Was ist Exceptionless?
Exceptionless heißt übersetzt Fehlerfrei - ein Zustand, den jeder Entwickler mit seiner Anwendung erreichen will. Das Problem dabei ist, dass die meisten Entwickler nicht genug Zeit haben, um das Programm jeden Tag mehrere Stunden zu testen und selbst wenn sie diese Zeit hätten würden sie niemals auf ein paar merkwürdigen Aktionen von den Endnutzern kommen. Das müssen sie auch gar nicht, denn die Benutzer können ja auch einfach sagen, was nicht funktioniert. Und da kommt Exceptionless ins Spiel. Mit dieser Software ist es möglich dem Benutzer möglich, dem Entwickler einen Aussagekräftigen Fehlerbericht zu senden. Somit muss der Benutzer keinen eigenen Text schreiben und der Entwickler bekommt genau das zu sehen, was ihn wirklich Interessiert.
Exceptionless ist ein sehr ausgereiftes System, welches in Echtzeit arbeitet. Das Programm sendet den Fehler und schon werden alle Informationen übersichtlich auf der Website angezeigt.
Fangen wir an!
Als erstes müsst ihr euch einen Account erstellen. Das könnt ihr hier tun. Nachdem ihr das getan habt könnt ihr euer erstes Projekt hinzufügen. Nachdem das getan ist, kommt ihr auf eine Seite, auf der euch genau erklärt wird, wie ihr vorgehen müsst. Ich will das hier auch einmal Schritt für Schritt auf Deutsch beschreiben:
1. Ihr öffnet Visual Studio in Visual Studio eure Projektmappe. Anschließend geht ihr auf
WICHTIG: Rechts, wo
Das folgende Problem: Exceptionless scheint ein wenig verbugt zu sein, weswegen wir ein bisschen was verändern müssen. Als erstes öffnet ihr die
Löscht diese Zeile. Als nächstes geht ihr auf "Alle Dateien anzeigen".
Nun klappt ihr
Dort schreibt ihr folgendes dazu:
Vergesst nicht, euren API Key einzutragen.
Wenn ihr das habt müsst ihr Exceptionless nur noch "aktivieren". Das tut ihr mit folgender Zeile:
WICHTIG: Ihr müsst den
Wichtig ist, dass diese Codezeile beim Starten der Anwendung ausgeführt wird. In C# kann diese Zeile somit in die
Als letztes müssen wir eine Fehlermeldung nur noch senden. Wie man global alle Fehlermeldungen sendet werde ich weiter unten beschreiben, hier zeige ich euch, wie ihr eine Fehlermeldung anhand eines einfachen Beispiels bekommt und senden könnt.
Der Code sollte klar sein. Wie lassen einen Fehler enstehen, indem wir mit einem nicht vorhandenen
Es gibt noch mehr Dinge, guckt einfach mal im Objectbrowser oder mit der IntelliSense nach.
Als letztes sei noch gesagt, dass das ganze asynchron verläuft, was heißt, dass wenn ihr einen Dialog machen wollt, der erscheint, wenn eine Fehlermeldung kommt und beim klicken auf Senden die Fehlermeldung sendet und sich schließt, die Fehlermeldung erst beim nächsten Start gesendet wird. Mit dem Code
wird die Fehlermeldung (werden die Fehlermeldungen) gesendet.
Joa, das wars eigentlich. Kommen wir nun zum globalen abfangen der Fehler.
Alle Fehler catchen
Bevor ihr jetzt anfangt um den Code in jeder Prozedur einen Try-Catch Block zu legen um den Fehler dann zu senden zeige ich euch, wie ihr die Fehler ganz einfach global abfangen könnt. Das ist leider bei jeder Technologie anders (VB + WinForms / VB + WPF / C# + WinForms / C# + WPF).
-> VB + Windows Forms
Ihr geht auf
Dort schreibt ihr folgendes hin:
-> C# + Windows Forms
Ihr scheibt folgendes in die
-> VB + WPF
Ihr geht wie bei WinForms zu
Jetzt wird es etwas komplizierter, da es nicht nur ein Event für alles gibt, sondern mehrere, die teilweise den gleichen Fehler senden.
Spoiler anzeigen
Außerdem solltest ihr folgendes zu eurer
-> C# + WPF
Eigentlich das gleiche wie in VB außer, dass das ganze in der
Spoiler anzeigen
Für C# gilt das gleiche wie für VB.Net:
Ihr solltet folgendes zu eurer
Schlusswort
Dann wünsche ich euch gutes gelingen und viel Spaß. Wenn ihr fragen habt, nur raus damit, vielleicht kann ich euch ja helfen.
Aber zuerst ein wenig über Exceptionless.
Was ist Exceptionless?
Exceptionless heißt übersetzt Fehlerfrei - ein Zustand, den jeder Entwickler mit seiner Anwendung erreichen will. Das Problem dabei ist, dass die meisten Entwickler nicht genug Zeit haben, um das Programm jeden Tag mehrere Stunden zu testen und selbst wenn sie diese Zeit hätten würden sie niemals auf ein paar merkwürdigen Aktionen von den Endnutzern kommen. Das müssen sie auch gar nicht, denn die Benutzer können ja auch einfach sagen, was nicht funktioniert. Und da kommt Exceptionless ins Spiel. Mit dieser Software ist es möglich dem Benutzer möglich, dem Entwickler einen Aussagekräftigen Fehlerbericht zu senden. Somit muss der Benutzer keinen eigenen Text schreiben und der Entwickler bekommt genau das zu sehen, was ihn wirklich Interessiert.
Exceptionless ist ein sehr ausgereiftes System, welches in Echtzeit arbeitet. Das Programm sendet den Fehler und schon werden alle Informationen übersichtlich auf der Website angezeigt.
Fangen wir an!
Als erstes müsst ihr euch einen Account erstellen. Das könnt ihr hier tun. Nachdem ihr das getan habt könnt ihr euer erstes Projekt hinzufügen. Nachdem das getan ist, kommt ihr auf eine Seite, auf der euch genau erklärt wird, wie ihr vorgehen müsst. Ich will das hier auch einmal Schritt für Schritt auf Deutsch beschreiben:
1. Ihr öffnet Visual Studio in Visual Studio eure Projektmappe. Anschließend geht ihr auf
Projekt
> NuGet-Pakete verwalten
.WICHTIG: Rechts, wo
Installierte Pakete
, Online
und Aktualisierungen
steht müsst ihr auf Online sein. Nun gebt ihr rechts oben "Exceptionless" ein. Als nächstes wählt ihr, wenn ihr WinForms benutzt Exceptionless.Windows
aus oder wenn ihr WPF benutzt Exceptionless.Wpf
aus. (Exceptionless
wird automatisch installiert).Das folgende Problem: Exceptionless scheint ein wenig verbugt zu sein, weswegen wir ein bisschen was verändern müssen. Als erstes öffnet ihr die
App.config
aus eurer Projektmappe. Dort sollte folgende Zeile drinstehen:Löscht diese Zeile. Als nächstes geht ihr auf "Alle Dateien anzeigen".
Nun klappt ihr
My Project
auf und öffnet AssemblyInfo.vb
.Dort schreibt ihr folgendes dazu:
Vergesst nicht, euren API Key einzutragen.
Wenn ihr das habt müsst ihr Exceptionless nur noch "aktivieren". Das tut ihr mit folgender Zeile:
WICHTIG: Ihr müsst den
Exceptionless
-Namespace importieren, da .Register()
eine Erweiterung ist.Wichtig ist, dass diese Codezeile beim Starten der Anwendung ausgeführt wird. In C# kann diese Zeile somit in die
Program.cs
-Datei geschrieben werden (Oder bei VB.Net in die ApplicationEvents
). Es ist außerdem möglich, diese Zeile in das Load-Event eines Formulares oder eines Windows zu schreiben, wobei ihr beim ändern des Startobjektes dieses berücksichtigen müsst.Als letztes müssen wir eine Fehlermeldung nur noch senden. Wie man global alle Fehlermeldungen sendet werde ich weiter unten beschreiben, hier zeige ich euch, wie ihr eine Fehlermeldung anhand eines einfachen Beispiels bekommt und senden könnt.
Der Code sollte klar sein. Wie lassen einen Fehler enstehen, indem wir mit einem nicht vorhandenen
StreamReader
eine Zeile lesen. ToExceptionless()
ist wieder eine Erweiterung. Mit .Submit()
senden wir den Fehler. Fertig. Obwohl, man kann noch verschiedene Sachen mitsenden:Es gibt noch mehr Dinge, guckt einfach mal im Objectbrowser oder mit der IntelliSense nach.
Als letztes sei noch gesagt, dass das ganze asynchron verläuft, was heißt, dass wenn ihr einen Dialog machen wollt, der erscheint, wenn eine Fehlermeldung kommt und beim klicken auf Senden die Fehlermeldung sendet und sich schließt, die Fehlermeldung erst beim nächsten Start gesendet wird. Mit dem Code
wird die Fehlermeldung (werden die Fehlermeldungen) gesendet.
Joa, das wars eigentlich. Kommen wir nun zum globalen abfangen der Fehler.
Alle Fehler catchen
Bevor ihr jetzt anfangt um den Code in jeder Prozedur einen Try-Catch Block zu legen um den Fehler dann zu senden zeige ich euch, wie ihr die Fehler ganz einfach global abfangen könnt. Das ist leider bei jeder Technologie anders (VB + WinForms / VB + WPF / C# + WinForms / C# + WPF).
-> VB + Windows Forms
Ihr geht auf
My Project
-> Anwendung
-> Anwendungsereignisse anzeigen
Dort schreibt ihr folgendes hin:
-> C# + Windows Forms
Ihr scheibt folgendes in die
Program.cs
:-> VB + WPF
Ihr geht wie bei WinForms zu
My Project
-> Anwendung
-> Anwendungsereignisse anzeigen
Jetzt wird es etwas komplizierter, da es nicht nur ein Event für alles gibt, sondern mehrere, die teilweise den gleichen Fehler senden.
VB.NET-Quellcode
- Dim IsHandled As Boolean = False
- Private Sub AppDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
- OnExceptionOccurred(DirectCast(e.ExceptionObject, Exception))
- End Sub
- Private Sub Application_DispatcherUnhandledException(sender As Object, e As Windows.Threading.DispatcherUnhandledExceptionEventArgs) Handles Me.DispatcherUnhandledException
- e.Handled = True
- OnExceptionOccurred(e.Exception)
- End Sub
- Private Sub OnExceptionOccurred(ex As Exception)
- If Not IsHandled Then
- IsHandled = True
- 'ex.Exception.ToExceptionless().Submit()
- End If
- End Sub
- Private Sub Application_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
- AddHandler MyDomain.UnhandledException, AddressOf AppDomain_UnhandledException
- End Sub
Außerdem solltest ihr folgendes zu eurer
App.config
hinzufügen:-> C# + WPF
Eigentlich das gleiche wie in VB außer, dass das ganze in der
App.xaml.cs
stattfindet:C#-Quellcode
- public App()
- {
- AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
- Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
- }
- void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
- {
- OnExceptionOccurred(e.Exception);
- e.Handled = true;
- }
- void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
- {
- OnExceptionOccurred((Exception)e.ExceptionObject);
- }
- bool IsHandled = false;
- void OnExceptionOccurred(Exception ex)
- {
- if (!IsHandled)
- {
- IsHandled = true;
- //e.Exception.ToExceptionless().Submit();
- }
- }
Für C# gilt das gleiche wie für VB.Net:
Ihr solltet folgendes zu eurer
App.config
hinzufügen:Schlusswort
Dann wünsche ich euch gutes gelingen und viel Spaß. Wenn ihr fragen habt, nur raus damit, vielleicht kann ich euch ja helfen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VincentTB“ ()