static inline void(* $global_exception_handler)(const std::exception& error) = nullptr;
public:
static void setGlobalExceptionHandler(void(* global_exception_handler)(const std::exception& error)) {
$global_exception_handler = global_exception_handler;
set_terminate([]() {
try {
Terminal::writeln("In 'try'");
std::rethrow_exception(std::current_exception());
} catch(const std::exception& exception) {
Terminal::writeln("In 'catch'");
$global_exception_handler(exception);
}
});
}
...
Привет, делаю функцию, которой можно передать функцию, которая будет вызвана тогда, когда какое-то исключение не будет отловлено. Но почему-то при выбросе такого исключения в блок try я попадаю, а в catch как-то не очень, и приложение падает. Что я делаю не так? :) Спасибо!
P. S. По коду всё объясню, если что-то осталось непонятным :Р
есть стандартные механизмы похожих вещей
кажется вы пытаетесь поймать исключение которого уже нет
Ну что, можно с этим вопросом пойти в pro.cxx? x)
честно, не понял вообще )
Что за $?
В приложении где-то не отловилось исключение - оно отловится глобальным отловщиком исключений
Это не относится к вопросу, если честно. У меня такой стиль кода - все поля с '$' в начале
Стоп-стоп-стоп. С++ исключения не ловятся глобально
Хм, на Майкософтовском сайте в какой-то статейке про неотловленные исключения говорилось именно прo set_terminate
MS юзают SEH, которые действительно можно поймать глобально
Обсуждают сегодня