Typ einer Exception zur Laufzeit betimmen?
-
Moin, gibts eine Möglichkeit, den Txp einer Exception zu bestimmen? Da mein Code keine Exceptions benutzt muss die Exception wohl von C++ kommen, ich find bloß nitgends einen Fehler und die Art des Fehlers könnte mir helfen die Quelle zu finden.
mfg
Glamdring
-
Wenn du debuggst, müsste doch der Typ der Exception vom Debugger angezeigt werden.
-
Abgesehen von einem Out of Memory Exception, wenn du mit new etwas anforderst, werfen noch ein paar STL-Klassen Exceptions. Soll heißen, du solltest heraus finden, wo an diesen Stellen es knallen könnte. Besorg dir ein vernünftige STL-Buch in dem drin steht, welche STL-Klasse und -Methoden entsprechende Excptions werfen, und bau da try-catch blöcke drum.
-
Um ein Ressourcenleck zu verhindern fange ich die Exception und debugge nicht (um ehrlich zu sein weis ich nichtmal wie das geht
)
@Artchi: Ich glaub nicht, dass es was mit der STl zu tun hat, weil die beteiligten Klassen die STL nicht nutzen
mfg
Glamdring
-
Na wenn du sie fängst, dann fällt sie doch in den entsprechenden catch-Block.
Außerdem ist die Exception wahrscheinlich eine Klasse, also kannst du auch den dynamischen Typ des Objekts bestimmen.
Aber zum Debuggen sind doch Exceptions eigentlich viel hilfreicher, wenn du sie nicht fängst.
-
ich hab den catch-Block nichtn spezialisiert, weil ich nur out_of_range und out_of_Memory als exceptions kenne. Aber ien Ressourcenloch zu riskieren, um den Typ einer Exception herauszufinden, ein biserl riskant, ne.
mfg
Glamdring
-
Da mein Code keine Exceptions benutzt muss die Exception wohl von C++ kommen
Wenn dein Code die STL nicht benutzt und du keine weiteren Bibliotheken verwendest, die Exceptions werfen, dann kann es sich kaum um eine C++ Exception handeln. Da bleiben dann nämlich nur std::bad_alloc (fehlgeschlagenes new) und std::bad_cast (fehlgeschlagener dynamic_cast). Erstere ist auf gängigen Systemen äußerst unwahrscheinlich und letztere solltest du im Code leicht finden können.
Falls du unter Windows arbeitest: Sicher dass es sich nicht um eine SEH-Exception handelt?
Das würde ich prüfen und an ansonsten erstmal eine try-catch-Block in main, der eine std::exception fängt (by reference natürlich) und dann den dynamischen Typ ausgibt (-> typeid)
-
Was ist ne SEH-Exception?
thx
Glamdring
-
Bähhh! Ich hab den Fehler gefunden, ich hab ne Funktion für nen genullten Pointer aufgerufen
-> undefiniertes Verhalten -> Exception.
Bsp:
Klasse* ptr = 0; ptr->machmairgendsowas();
mfg
Glamdring
-
Glamdrink schrieb:
Ich hab den Fehler gefunden, ich hab ne Funktion für nen genullten Pointer aufgerufen
-> undefiniertes Verhalten -> Exception.
Unter Windows ist das eine SEH-Exception.
SEH = Structured Exception Handling.
-
thx