Also ich geh hier schon die Wände hoch, ich hab einen bug, der das
Programm zwischen exception throw und catch abstürzen lässt,
d.h. bis zum throw funktioniert noch alles, aber dann wird es
bei catch nicht mehr aufgefangen (fragt nicht, wielange es
gedauert hat, bis ich das rausgefunden hab…)
Sowas kann ja eigentlich gar nicht sein??
Wer kennt sich mit solchen Murphyspezialfällen aus, bisher
konnte mir noch keiner weiterhelfen?
Oder wo könnte ich sowas sonst noch posten?
Es gibt bei „try“ zwei etwas besondere Fälle. Vermutlich ist einer von beiden bei dir der Grund für die nicht-gefangene Exception.
Der erste Fall ist ein „try“ innerhalb eines Konstruktors. Der Konstruktor stellt ja Speicherbereiche für ein Klassenobjekt zur Verfügung, die nach einem fehlgeschlagenen „try“ aber nirgendwo mehr gelöscht werden (der Destruktor wird ja nie aufgerufen). Einige Compiler behandeln eine Exception innerhalb eines Konstruktors daher gnadenlos mit dem Aufruf von „terminate()“. Nunja, auf jeden Fall ist es sinnvoll, auf „try“ in Konstruktoren zu verzichten!
Der zweite Fall ist, dass innerhalb deines „try“-Blocks eine andere Exception geworfen wird als du eigentlich erwartest. Setz doch einfach mal hinter deinen eigentlichen „catch“-Block einen „catch(…)“-Block. Dieser fängt dann alle Exceptions, die du selber nicht beachtet hast. Ich schreibe z.B. hinter jeden „catch()“-Block einen solchen „catch(…)“-Block:
catch(...) {
assert(NULL=="!!! Nobody wanna catch me !!!!");
}
Das hat mir schon einige seltsame Programm-Terminierungen erspart, denn eine nicht-gefangene Exception führt ja bekanntlich zum Aufruf von „terminate()“ …