| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg
Beiträge: 4.350
| Exceptions über zentrale Klasse schmeißen?
Hallo, ich bin grade am überlegen, ob es nicht geschickt wäre, keine Exceptions mehr direkt zu schmeißen, sondern nur indirekt über eine Klasse, die das für mich macht. Der Vorteil wäre, dass ich in der fertigen Anwendung dann einfach das schmeißen von Exceptions deaktivieren könnte, und statt dessen eingehende Exceptions protokollieren, und dann feste die Daumen drücken, dass die Anwendung trotzdem weiter läuft. Denn in den meisten Fällen sind die Exceptions ja mehr Warnungen als fatale Fehler. Ich glaube es käme besser beim Anwender an, wenn die Anwendung irgendwie so lang läuft wie möglich, und sich nicht beim ersten Wehwehchen verabschiedet. Was haltet ihr von der Idee? Irgendein grober Denkfehler irgendwo? Gruß, Janosch
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #2 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
| In der fertigen Anwendung sollte es nicht mehr zum Aufkommen von Exceptions kommen. Wenn es trotzdem zur Laufzeit zu Fehlern kommt - was auch schlecht ist, solltest du entsprechende Fehlerbehandlungen einbauen. Denn dafür sind sie da. Hier vielleicht 3 interessante Links für dich: Exceptions |
| | |
| | #3 (permalink) |
| undefined Registriert seit: Jul 2001 Ort: Stuttgart
Beiträge: 1.859
|
Guter Lesestoff. Auf AS3 übertragen kann man schlussfolgern: "Throw early catch late" Wenn der Client was gegen die Exception machen kann die Exception weiterleiten ansonsten loggen oder die Ausführung des Programms unterbrechen. Niemals eine Exeption mit einem leeren catch block "verarbeiten" Checked und unchecked Exeption gibt es ja in AS3 noch nicht somit entfällt diese Entscheidung
__________________ mfg Frank |
| | |
| | #5 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Das mit der Klasse habe ich auch schonmal gemacht. Vor allem deshalb, weil Flex manche Exceptions selbst catched und dann zum Teil verschluckt. In der Klasse habe ich dann eine Exception geschmissen und sofort gecatched um den Stacktrace zu bekommen und dann per Timer verzögert als Alert ausgegeben. Die Verzögerung hatte ich eingebaut um aus dem aktuellen Kontext rauszukommen.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #6 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg
Beiträge: 4.350
|
Exceptions können sehr wohl im fertigen Produkt auftreten, sie müssen dann nur angemessen gehandhabt werden. Das Problem an einer solchen Exception-Schmeiß-Klasse ist also, dass, deaktiviere ich die Exceptions im fertigen Betrieb, auf diese Exceptions nicht mehr reagiert werden kann. Zwar werden sie von der Klasse geloggt, aber lösen kann das Problem dann keiner mehr. Was mir jetzt aber Sorgen macht, ist, dass viele Exceptions letzten Endes vom Benutzer (sprich im Code irgendeinem Componenten-Listener) ausgelöst werden. Um diese Exceptions zu fangen, müsste man jeden Listener mit try-catch versehen, und das mache vielleicht ich, aber das machen nicht alle anderen, die hier an so einer Anwendung arbeiten. Schwierig, was macht man da? Am liebsten würde ich irgendwie alle Exceptions gaaanz oben fangen, und dort dann loggen, denn andernfalls gehen sie ja einfach verloren, oder? Wie meinst du das? Hast du da ein Beispiel?
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #7 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Ja, wenn z.B. eine Nullpointer Exception innerhalb eines Bindings auftritt, wird sie vom Flexframework gecatched. Code: <mx:Script>
<![CDATA[
[Bindable] private var content : String;
private function formatContent( input : String ) : String
{
trace("formatContent 1", input );
var length : int = input.length;
trace("formatContent 2", length ); //hier kommst du nicht hin, solange content null ist
return length + ":" + content;
}
]]>
</mx:Script>
<mx:Label text="{ formatContent( content )}"/>
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #8 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
| Ja, Exceptions können immer mal wieder auftreten (beispielsweise wenn ein Web Service nicht erreichbar ist). Aber deswegen gibt es ja try { ... } catch (e:Error) { ... } finally { ... }. Ich hab's mir auch erst wieder in ActionScript angewöhnt. Mittlerweile ziehe ich es aber wieder konsequent durch. Ich hatte mich da auch falsch ausgedrückt. Wieso solltest du die Exceptions und Fehlerbehandlungen rauswerfen im fertigen Produkt? |
| | |
| | #9 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg
Beiträge: 4.350
|
Wie eingangs geschrieben wäre es in den meisten Fehlerfällen besser, die fertige Anwendung würde einfach weiterlaufen (wie im guten alten Flash 6), statt sich zu verabschieden. Daher wäre es reizvoll, alle Exceptions auf oberster Ebene zu loggen und sonst zu ignorieren.
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #10 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
| Aber das ist doch keine effiziente Fehlerbehandlung oder nicht? Wenn ein Error geworfen wird, dann sollte man doch auf diesen angemessen reagieren und ihn nicht einfach ignorieren. Gerade in der fertigen Anwendung sollten Fehler vom System angemessen behandelt werden und nicht einfach ignoriert werden und geloggt werden. Oder sehe ich das falsch? |
| | |
| | #11 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Ich finde es gibt (mindestens) zwei Arten von Fehlern. Solche, die nur während der Entwicklung auftreten können und solche, die später noch auftreten können. Entwicklungsfehler will ich einfach nur möglichst schnell sehen. Die anderen sollten nach Möglichkeit entsprechend behandelt werden.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #12 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg
Beiträge: 4.350
|
Du siehst das schon richtig, nur in der Realität treten halt dann in der fertigen Anwendung doch Fehler auf, mit denen keiner gerechnet hat, und die so schnell auch nicht behoben werden. Wie geht man mit diesen Fehlern um? Es ist ja nicht so, dass Flash "nur" wegen einer NullPointerException gleich das ganze System mit sich reißen würde, viel mehr würde dann eben in einem speziellen Fall eine spezielle Funktion den Dienst versagen. Und genau hier denke ich wäre es eben am besten, wenn man ganz allgemein (und zentral) nicht gefangene Ausnahmen loggen und sonst ignorieren könnte. Vielleicht auch dem Benutzer die Wahl lassen, ob er den Fehler ignorieren, oder weitermachen will. EDIT: Im Debug-Player gibt es ja genau sowas, aber im normalen Player werden die Exceptions einfach ignoriert (ohne Log eintrag!)
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) Geändert von Janoscharlipp (10-12-2007 um 12:39 Uhr) |
| | |
| | #13 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Ich würde erstmal sammeln und loggen. Welche Exceptions von Bedeutung sind und weiter verarbeitet werden müssen, kannst du dann später entscheiden.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #14 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg
Beiträge: 4.350
|
Wie gesagt, dass zuverlässig gesammelt wird liegt nicht allein in meiner Hand. Natürlich soll alles abgefangen werden, wird es aber real nicht. (kennt ihr sicher aus Eclipse oder FlashDevelop, irgendwann kommt immer mal das Fenster mit zwei Knöpfen: continue oder exit) Und genau so ein Fenster will ich auch machen können, OHNE den Debug-Player. Die mx.core.Application hat ein "error" Event, leider fliegt das nur bei Übertragungsfehlern, nicht bei irgendwelchen eigenen Exceptions
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #15 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
No chance. So einen globalen Handler gibt es leider nicht.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |