Java Exceptions in Strings verpacken

Wenn in einem Java-Programm etwas schiefläuft so, wird in den meisten Fällen eine Exception erzeugt und diese nach oben im Stack durchgereicht, bis sie behandelt wird. Manchmal ist es notwendig die Exception bzw. Teile davon in einen String umzuwandeln. Natürlich kann die Exception nun mühsam von Hand auseinander genommen und in einen String konvertiert werden. Sinnvoller ist es die Hilfsmethoden aus der Utility-Bibliothek Guava zu nutzen:

String stacktrace = Throwables.getStackTraceAsString(e);

Bei der Methode getStackTraceAsString wird der Stacktrace der betreffenden Exception in einen String umgewandelt. Neben dieser Methode existieren weitere Methoden rund um das Exception-Handling in der Klasse Throwables. Einfacher wird das Ganze, wenn ein Logger genutzt wird und in diesem die Exception auftauchen soll:

Logger logger = LoggerFactory.getLogger(new Exception().fillInStackTrace().getStackTrace()[0].getClassName());
logger.error("Exception: ", e);

In diesem Fall bieten die meisten Logger die Möglichkeit an, das Throwable direkt als Parameter zu übergeben. Die weitere Verarbeitung der Exception wird anschließend vom Logger erledigt.

Ausnahmen in der MediaWiki mit Details anzeigen

Unter Umständen kann es vorkommen, das die MediaWiki Software im Betrieb eine Ausnahme (Exception) wirft. Dann bekommt man eine Meldung nach dem Schema:

[6030c238] 2015-02-16 8:48:30: Fatal exception of type MWException

Diese Aussage ist natürlich zur Fehlerfindung nicht sehr aussagekräftig. Damit man eine ausführliche Ausgabe zur Exception bekommt, muss in der LocalSettings.php Datei folgende Option hinzugefügt werden:

$wgShowExceptionDetails=true;

Anschließend erhält man im Falle eine Exception einen sauberen Callstack, mit welchen man sich auf Fehlersuche begeben kann.

Exceptions?

Wenn in einem Programm ein Fehler auftritt, so wirft man in der Regel eine Exception (im Deutschen Ausnahme genannt). Damit kann der Programmierer den Fehler bearbeiten bzw. entsprechend auf ihn reagieren. Früher als es noch keine Exceptions gab, behielf man sich mit Rückgabecodes. Da gab es halt eine -1 wenn der Dateizugriff nicht funktioniert oder eine -2 wenn die Authentifikation fehlschlug.

tweetinvi.codeplex.com/documentation

tweetinvi.codeplex.com/documentation

Diese Rückgabecodes haben aber mehrere Nachteile. So muss der Programmierer den Code immer abfragen, vergisst er dies wird in der Verarbeitung einfach weiter verfahren – mit den entsprechenden Konsequenzen. Manchmal gibt es aber Programmierer, die Nutzen eine Sprache welche Exceptions unterstützt, nur um sie dann in ihrer Bibliothek in Statuscodes umzuwandeln. Die Twitterbibliothek Tweetinvi für C# macht genau dies. Anstatt für ein Problem eine Ausnahme auszulösen, wird das Problem versteckt. Und dann schreiben Sie in der Dokumentation auch noch, das Sie das nur getan haben um die Entwicklung zu erleichtern. Das ist wieder mal ein typischer Fall von “Bauschutt während der Entwicklung geraucht”.

Exceptions zwangsweise fangen

Manchmal möchte man im Visual Studio Exceptions fangen obwohl sie z.B. in einem “try catch” Block liegen. Dies ist relativ einfach möglich sobald man weiß an welcher Stelle man suchen muss. Im Menü “Debug” gibt es den passenden Menüpunkt:

Wenn man dort den Punkt “Exceptions…” aufruft bekommt man folgendes Dialogfenster zu sehen:

In diesem kann man dann alle Exceptions angeben welche zwangsweise gefangen werden sollen.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Visual_Studio