Leidiges Thema: Error Handling und Error Reporting
-
berniebutt schrieb:
Ohne Exceptions und Debug bleibt nur die altbewährte Methode mit Kontrollausgaben auf dem Bildschirm oder in einer Datei.
Logging ist nur ein sehr kleiner Teil der Fehlerbehandlung.
-
volkard schrieb:
Frank Erdorf schrieb:
Ich finde daß deutlich besser als exeptions,
weil ich sowieso immer Fehler loggen muss.
Und nicht nur da wo sie auftreten, sondern im kompletten Callstack.
Hierbei sollte jede Call Ebene ihre Kontextinformationen mit loggen.
So kann man dann auch tatsächlich verstehen wie ein Fehler zustande gekommen ist.lol
Liegt halt daran, dass der Informationsgehalt von C++ Exception gleich Null ist.
Wenn es ein singlethread System ist, kannst du auch ohne großen Aufwand ein globales Fehlerflag oder einen Fehlerstack oder getLastError oder sowas verwenden.
-
Liegt halt daran, dass der Informationsgehalt von C++ Exception gleich Null ist.
Vor allem, wenn man immer
std::exception("Es ist irgend ein Fehler passiert")
wirft. Aber dazu gibt es, soweit ich weiß, keine polizeiliche Verpflichtung.
-
volkard schrieb:
Logging ist nur ein sehr kleiner Teil der Fehlerbehandlung.
Fehler sind aber dazu da, möglichst vermieden zu werden. Wenn ich etwas mit Logging erledigen kann, schmeisse ich nichts anderes an oder nehme es nur im absoluten Notfall. Da sind wir aber bei dem Thema 'Möglichst fehlerfreies und wartungsfreunliches Programm-Design'. Kein System oder Compiler kann Denkfehler oder schlechtes Design kompensieren! :p
-
volkard schrieb:
Liegt halt daran, dass der Informationsgehalt von C++ Exception gleich Null ist.
Vor allem, wenn man immer
std::exception("Es ist irgend ein Fehler passiert")
wirft. Aber dazu gibt es, soweit ich weiß, keine polizeiliche Verpflichtung.Wenn du mir jetzt noch zeigst wie man neben einem sinnvollen Text auch noch einfach und systemunabhängig einen Stacktrace aus ner std::exception bekommt, dann bin ich voll begeistert.
~Zuletzt bearbeitet von schoolsout4ever am 13:45:35 25.07.2010, insgesamt 72-mal bearbeitet~
-
schoolsout4ever schrieb:
Wenn du mir jetzt noch zeigst wie man neben einem sinnvollen Text auch noch einfach und systemunabhängig einen Stacktrace aus ner std::exception bekommt, dann bin ich voll begeistert.
Das zeige ich Dir, wenn Du mir zeigst, wie man mit einer Säge Schrauben festbohrt.
-
-
schoolsout4ever schrieb:
was bedeutet festbohrt?
-
festbohrt? schrieb:
was bedeutet festbohrt?
Das ist ein genialer Neologismus. Er wurde heuer von Pattex in einem Werbespot verbreitet. Da mußt eine Dame etwas nicht "festbohren". Gemeint war natürlich Dübeln.
Ich mag das Wort. Es ist noch toller als "Ich stelle ein Schitzel in die Mikrowelle." Das ist ja nur richtig falsch. Aber festbohren ist so toll widersprüchlich.Vor wenigen Wochen gab es nur zwei google-Treffer zu "festbohren". Und schau, was heute schon los ist!
http://www.google.de/#hl=de&&sa=X&ei=5VRMTKLOL8SZOIuy9JUD&ved=0CCMQBSgA&q=festbohren&spell=1&fp=edb299ab19385cd9
-
festbohrt? schrieb:
schoolsout4ever schrieb:
was bedeutet festbohrt?
Man nimmt eine Handkreissäge, macht seitlich eine Schraube hin und hält das an die Wand und gibt Gas.
-
eher bohrt man solang in ein stahlträger bis der bohrer festschmiltzt das nennt sich dann auch festgebohrt
-
schoolsout4ever schrieb:
Man nimmt eine Handkreissäge, macht seitlich eine Schraube hin und hält das an die Wand und gibt Gas.
Das muß ich wohl gelten lassen.
Eigentlich wollte ich den Aufrufkontext klassisch festhalten in einem entsprechenden globalen Stack. Aber dann ist es mir gekommen, daß ich dafür nicht bezahlen muß, wenn ich wie folgt trickse:
Beim GCC für Exceptions angeblich keine Laufzeitkosten mehr sind, wenn sie nicht fliegen - außer mittelbar durch größere exe-Datei und so.#include <iostream> #include <cmath> #include <stdexcept> #include <sstream> #include <string> using namespace std; class funny_exception:public std::runtime_error{ public: string context; funny_exception(const char* msg): std::runtime_error(msg){ } ~funny_exception() throw(){ } }; double wurzel(double x) try{ if(x>100) throw funny_exception("Irgend ein Fehler ist aufgetreten"); return sqrt(x); } catch(funny_exception& ex){ ostringstream out; out<<"In "<<__FILE__<<':'<<__LINE__<<" wurzel("<<x<<')'<<'\n'; ex.context+=out.str(); throw; } double berechneHypotenuse(double a,double b) try{ return wurzel(a*a+b*b); } catch(funny_exception& ex){ ostringstream out; out<<"In "<<__FILE__<<':'<<__LINE__<<" berechneHypotenuse("<<a<<','<<b<<')'<<'\n'; ex.context+=out.str(); throw; } int main(){ try{ cout << berechneHypotenuse(3,101) << endl; } catch(funny_exception& ex){ cout<<ex.context; cout<<ex.what()<<'\n'; return 1; } }
Ausgabe:
In D:\src\research\exctest\main.cpp:26 wurzel(10210) In D:\src\research\exctest\main.cpp:37 berechneHypotenuse(3,101) Irgend ein Fehler ist aufgetreten
-
könnt ihr mich nicht mit c++ verschonen? jetzt hab ich mich extra in den ansi c bereich zurückgezogen und werde immernoch von euch belästigt. das gefällt mir nicht. dieser try/catch code von volkard übrigens auch nicht
-
ANSI_C_FORUM schrieb:
könnt ihr mich nicht mit c++ verschonen? jetzt hab ich mich extra in den ansi c bereich zurückgezogen und werde immernoch von euch belästigt. das gefällt mir nicht. dieser try/catch code von volkard übrigens auch nicht
std::cout<<"Gell, das macht Dich neidisch."<<std::endl;
-
puts("Gell, das macht Dich neidisch.");
-
Fast so gut wie meine Festbohrmaschine
-
ANSI_C_FORUM schrieb:
könnt ihr mich nicht mit c++ verschonen? jetzt hab ich mich extra in den ansi c bereich zurückgezogen und werde immernoch von euch belästigt. das gefällt mir nicht. dieser try/catch code von volkard übrigens auch nicht
Na ja, auch als ANSI-C-Programmierer kann man einzelne Dinge von C++ gut gebrauchen. Die Stream-Klassen zum Beispiel und einfache eigene Klassen statt der einfachen C-Structs auch. Das erfordert wenig Umdenken, kann die Programmierung aber deutlich erleichtern. :p
Was macht eine Festbohrmaschine zum Error Handling und Error Reporting? Bohrt die meinen Code auf mögliche Fehlersituationen auf? Da entsteht doch ein Loch und zermahlter Codestaub!
-
Das Wort "festbohren" kenne ich schon seit meiner Jugend. Scheint regional bedingt zu sein.
-
--- schrieb:
Das Wort "festbohren" kenne ich schon seit meiner Jugend. Scheint regional bedingt zu sein.
das klingt nicht jugendfrei
-
--- schrieb:
Das Wort "festbohren" kenne ich schon seit meiner Jugend. Scheint regional bedingt zu sein.
Wo ist das? Haben Frauen es Dir beigebracht?