Bug zwischen exception throw und catch?!?

Hi Leute!

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?

Danke für jeden Tip!!!
Saskia

Hi Saskia :smile:))

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()“ …

cu Stefan.

ne,das kann leider beides nicht sein*seufz*(o.T.)

Dann zeig doch mal deinen Source(o.T.)
Ich sag’ doch, ohne Text :smile:))

Hi,
hast Du mal Throwable gecatcht? Nicht alles ist eine Exception!

Gruß

J.

ich habs :smile:)
also, ich habs endlich gefunden, ich hatte zweimal Speicher
wieder freigegeben, wo ich doch nur einen hatte…

danke an alle, die geantwortet haben :smile: