Was realisiert ihr die Fehlerbehandlung in euren Programmen



  • Hi,

    in PHP + den ganzen Frameworks wie Zend, wird ja viel mit Exceptions gearbeitet und so weit ich weiß in Java auch.
    Ich frage mich nun, ob Exceptions in C++ genauso intensiv genutzt werden wie in den anderen Sprachen? Ich bin der Meinung gelesen zu haben, dass die Exceptions viel weniger in C++ genutzt werden. 😕



  • Ich verwende aktiv Exceptions mit vernünftigem Inhalt (der mir auch was sagt) als "Release-Ersatz für asserts". Nur ganz ganz selten fange ich mal selber eine, dort wo ich Kontext hinzufügen möchte, oder exceptions nunmal die Kommunikationsform von 3rd-party code ist.
    EDIT: Aber allgemein gesprochen, jedes Projekt kocht da irgendwie sein eigenes Süppchen je nach Hintergrund der beteiligten Personen etc. Ich habe auch noch keinen größeren Konsens im Netz der Netze gefunden... Ist genauso wie wenn man im Linux-Forum nach der besten Distribution fragt.
    Es ist aber trotz allem und unabhängig davon, wie man selbst nun exceptions verwendet, eine weise Entscheidung, seinen Code Exception-sicher zu gestalten! Das halte ich für den wichtigsten Aspekt, weil er mit "Stabilität" einhergeht, wohingegen die anderen Entscheidung eher Einfluss aus die Lesbarkeit und Codequalität haben.



  • Butterbrot schrieb:

    Ich frage mich nun, ob Exceptions in C++ genauso intensiv genutzt werden wie in den anderen Sprachen?

    Eher nicht.

    Butterbrot schrieb:

    Ich bin der Meinung gelesen zu haben, dass die Exceptions viel weniger in C++ genutzt werden. 😕

    Na ja, viel weniger ist so eine Sache. Meine Regel ist: Erwartet man, dass etwas schief gehen kann, und kann man das Programm danach auch noch relativ leicht weiter laufen lassen, nimmt man Rückgabewerte.
    Für den Rest nimmt man Exceptions. z.B. Fenster kann nicht geöffnet werden, input Datei ist nicht vorhanden, etc.



  • Ich habe mir gerade die Artikel hier im Magazin über Exceptions durchgelesen und irgendwann nur noch überlesen, da es doch ein dicker Brocken für mich ist und ich so viel Info unmöglich gleich nach dem Lesen auf meine Programme anwenden kann.

    Am Ende eines Artikels wurde auch erwähnt, dass Exceptions ja nur eine Möglichkeit ist um seine Fehler zu bändigen und es Alternativen gibt.

    Nutzt ihr auch die anderen Methoden zur Fehlerbehandlung, die hier im Zitat aufgeführt sind?

    Die weite Welt
    Exception Handling ist nur eine mögliche Lösung für das komplexe Problem der Fehlerbehandlung. Sie haben in diesem Artikel bereits ein paar Methoden kennengelernt, es gibt aber noch weit mehr. Jede dieser Methoden hat Vorteile und Nachteile, es gibt keine beste Lösung hier.

    Error Stack
    Jeder Fehler, der auftritt, wird auf einen bestimmten Stack gesetzt und die Funktion beendet sich selbst. An bestimmten Codestellen kann man dann auf Fehler testen, die ja alle auf diesem Error Stack liegen. Jeder Code kann einen behandelten Fehler vom Stack poppen - man hat somit ein feineres System was Fehlerbehandlung betrifft, als wir bei Exceptions haben (wo es nur den Zustand Fehler (Exception wurde geworfen) und nicht Fehler (keine Exception geworfen) gibt.

    Deferred Error Handling
    iostream macht es vor: wenn ein Fehler auftritt, dann setzen wir ein internes error-flag und teilen so mit, dass etwas schiefgegangen ist.

    Callbacks
    Unter Unix sind Signals recht bekannt, in der Windows-Welt eher nicht. Dennoch bieten Signale eine interessante Möglichkeit Fehler zu handhaben. Jedes Mal wenn ein Fehler auftritt, wird ein Signal generiert, auf das eine Anwendung (oder ein Teil einer Anwendung) per Callback reagieren kann, indem man das Callback für das entsprechende Signal registriert.

    Zu diesen 3 Methoden gibt es unter C++ Exception Alternatives auch ein bisschen Lesestoff, wenn Sie mehr erfahren wollen.

    Conditions
    Nicht jeder Fehler ist ein fataler Fehler. Conditions ermöglichen es, an definierten Stellen von einem Fehler zu recovern.



  • Butterbrot schrieb:

    Ich habe mir gerade die Artikel hier im Magazin über Exceptions durchgelesen und irgendwann nur noch überlesen, da es doch ein dicker Brocken für mich ist und ich so viel Info unmöglich gleich nach dem Lesen auf meine Programme anwenden kann.

    Das ist kein guter Grund, eine der anderen Möglichkeiten zur Fehlerbehandlung verwenden zu wollen. Die haben nämlich auch alle ihre Tücken und werden meist aus entweder aus triftigeren Gründen eingesetzt (oder ohnehin bei Legacy-Code).

    Schreib doch einfach mal ein kleines Programm mit Exceptions + Exceptionhandling und poste es hier, wenn du dir nicht sicher bist ob irgendwas daran nicht passt.



  • Echt, die Methoden werden mehr in Alten-Code verwendet, das kam in dem Artikel anders rüber?

    Exception Handling ist nur eine mögliche Lösung für das komplexe Problem der Fehlerbehandlung. Sie haben in diesem Artikel bereits ein paar Methoden kennengelernt, es gibt aber noch weit mehr. Jede dieser Methoden hat Vorteile und Nachteile, es gibt keine beste Lösung hier.

    Wenn ich richtig bei Exceptions angekommen bin und dort Probleme bekomme, dann poste ich das natürlich.

    Im Moment habe ich noch andere Baustellen und alles lernen und dann erst ein Projekt anfangen will ich nicht. Irgendwann muss ich auch mal loslegen und was machen und das bis jetzt gelesene, und in kurzen Beispielprogrammen ausprobierte, auch mal in einem kleinen Projekt umsetzen.

    Aber die Exceptions stehen auf der ToDo-Liste, genauso wie Templates und noch ein paar der Konstruktorttypen sowie Operatorüberladungen, die ich noch nie gebraucht habe.



  • Butterbrot schrieb:

    Echt, die Methoden werden mehr in Alten-Code verwendet, das kam in dem Artikel anders rüber?

    Nein, das habe ich auch nicht geschrieben. Ich habe geschrieben, dass man haeufig bessere Gruende haben wird _oder_ alten Code weiterpflegt.



  • Ok, nutzt denn wer hier Alternativen zu Exceptions, also implementiert irgend eine eignen Art der Fehlerbehandlung? Ich dachte da an eine Error-Klasse die bei den wichtigen Klassen halt per Mehrfachvererbung oder direkt vom Basisobjekt vererbt wird. Beispielsweise ein Errorbit mit Text oder einer Fehlernummer etc.



  • Und was willst Du mit der Fehlerklasse dann machen, wenn nicht schmeißen?



  • In dem Block wo eine Methode einer Klasse genutzt wird das ErrorBit abfragen, dann eine Fehlercode ausführen und loggen, zum Beispiel. Man möge mir meine Naivität verzeihen, ich bin noch ein Rookie was C++ angeht.



  • Butterbrot schrieb:

    Ok, nutzt denn wer hier Alternativen zu Exceptions, also implementiert irgend eine eignen Art der Fehlerbehandlung? Ich dachte da an eine Error-Klasse die bei den wichtigen Klassen halt per Mehrfachvererbung oder direkt vom Basisobjekt vererbt wird. Beispielsweise ein Errorbit mit Text oder einer Fehlernummer etc.

    Es kommt halt drauf an, was sich grad anbietet. In einem großen Projekt kann alles mögliche vorkommen. "Deferred error handling" und Callbacks hab ich auch öfter verwendet, allerdings muss man schon einen guten Grund haben, das so zu machen. Callbacks hab ich bisher nur bei komplexen, abgekapselten Prozessen verwendet, wo die Steuerung von außen nicht direkt beeinflußt werden kann, und ich eine Controller Schnittstelle definiere, über die man steuern kann, was in bestimmten Situationen passieren soll. Seh ich jetzt aber nicht direkt als Alternative zu Exceptions oder Rückgabewerten.


Log in to reply