Verwirrung: Exception und Abort
-
try { throw 1; } catch(...) { std::cout << "caught"; };P
-
So ein Müll. Ich hatte doch tatsächlich gehofft, ernsthafte Antworten vorzufünden.
Jetzt scheiß ich halt auf Exceptions
-
Die "ernsthafte" Lösung ist bereits in den gegebenen Antworten enthalten (bzw. in dem Fakt, dass sie die Frage scheinbar nicht beantworten).
-
Der Fehler muß woanders liegen. Hast Du da mehr Code drin, wirfst zum Beispiel in einem Destruktor noch eine Exception?
-
Nichts außer int main().
int main(int argc, char** argv) { try { throw 1; } catch(...) { std::cout << "caught\n"; return 0; } std::cout << "not caught\n" << std::endl; return 0; }
-
nielsp schrieb:
Nein, nichts. Lediglich int main():
int main(int argc, char** argv) { try { throw 1; } catch( ... ) { return 0; } return -1; }Habs soeben bei mir compiliert und gestetet und der Proess gibt einfach nur 0 zurück.
-
Wie ja gewollt. Aber bei kommt halt abort raus.
-
nielsp schrieb:
Wie ja gewollt. Aber bei kommt halt abort raus.
und wir sollen jz raten, was du falsch machst? ><
ich denke, da wärst du im compiler und ide forum besser aufgehoben
vll gibts irgendwelche flags beim g++, die setzen, was man mitcatch(...)alles fängt bzw. was nicht...vll liegt der fehler auch ganz bei dir(war schon oft so, dass hier leute da waren, die die falsche datei kompiliert haben und deshalb dann nen anderes ergebnis hatten, als der quellcode vermuten ließ^^)
bb
-
nielsp schrieb:
Jetzt scheiß ich halt auf Exceptions
Empfehle ich dir nicht, aber uns würde das ehrlich gesagt nicht allzu viel ausmachen...
Versuch mal, im Debug-Modus den Ursprung des
abort()zu eruieren. Am besten zuvor gesamtes Projekt neu kompilieren, gegebenenfalls sogar ein neues Projekt erstellen.
-
Neues Projekt und so hab ich schon gemacht.
Debug gibt folgendes:#0 0x00007fff80268ff6 in __kill () #1 0x00007fff8030a072 in abort () #2 0x0000000100183c82 in uw_init_context_1 () #3 0x00000001001842be in _Unwind_RaiseException () #4 0x0000000100074dd9 in __cxa_throw () #5 0x0000000100000e0a in main ()Grüße
-
kompletter quelltext und vll auch die befehlszeile, wie du das ganze compilierst und linkst?
-
Ja, na klar:
main.cpp:
#include <iostream> int main(int argc, char** argv) { try { throw 1; } catch(...) { std::cout << "caught" << std::endl; return 0; } std::cout << "not caught" << std::endl; return 1; }Kompiliert mit:
g++ main.cppGrüße
-
Tja, mit g++ 4.4.1 kommt genau das zu erwartende Verhalten raus.
-
int main() {}was macht er denn nun?
-
Also bei int main() {} passiert wie gewünscht nichts. Ich habe jetzt g++-4.4 eingerichtet, aber abort trap kommt immer noch.
Grüße,
Niels
-

-
poste doch noch mal im compiler- und ide-forum...
das ist eindeutig kein C++ problem sondern unter umständen ein bug im gcc oder was weiß ich...