ExceptionGehtNicht
-
Hallo, warum wird in folgendem Code nichts auf der Console ausgegeben?
void catch_global() { try { throw; } catch (...) { std::wcerr << L"Error!" << std::endl; } abort(); } int main() { std::set_terminate(catch_global); throw; return 0; }
-
"
throw;
" wirft nur weiter. Teste mal z.B. "throw 0;
"
-
Ok, das geht soweit, aber was wenn ich zusätzlich noch eigene (nicht behandelte) Exceptions abfangen möchte?
void catch_global() { try { throw; } catch(const MyException& exception) { std::wcerr << L"MyException!" << std::endl; } catch (...) { std::wcerr << L"Error!" << std::endl; } abort(); } int main() { std::set_terminate(catch_global); throw MyException(); return 0; }
Es wird leider nur "Error!" ausgegeben.
-
Wie kommst du auf die Idee, mit dem terminate Handler Exceptions fangen zu können?
-
Weil ich das hier so gelesen habe:
http://www.extinguishedscholar.com/wpglob/?p=176
-
Ich kann weder im Standard noch in TC++PL etwas finden, das auch andeutet, dass das funktioniert. Lediglich für den unexpected Handler wird gesagt, dass ein rethrow möglich sei. Da auch dein Experiment fehlschlägt, gehts wohl nicht bzw. nur in manchen Implementierungen.
-
Normalerweise macht man deswegen um den in Frage kommenden Code einfach selbst einen try-catch-Block.
-
Oder benutzt platform-spezifische Funktionen, wie z.B. SetUnhandledExceptionFilter(..) unter Windows:
http://msdn.microsoft.com/en-us/library/ms680634.aspxOder _set_se_translator(..), http://msdn.microsoft.com/en-us/library/5z4bw5h5.aspx