/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/terminate_handler/terminate_handler.cpp
36 строк
1001 B
qkrorlqr
Initial NBS OpenSource export
28 апр 2023, 21:54
28 апр 2023, 21:54
783a858
Код
Авторство
О чём код?
#include <cstdlib> #include <exception> #include <util/stream/output.h> #include <util/system/backtrace.h> #include <util/generic/yexception.h> namespace { // Avoid infinite recursion if std::terminate is triggered anew by the // FancyTerminateHandler. thread_local int TerminateCount = 0; void FancyTerminateHandler() { switch (++TerminateCount) { case 1: break; case 2: Cerr << "FancyTerminateHandler called recursively" << Endl; [[fallthrough]]; default: abort(); break; } if (std::current_exception()) { Cerr << "Uncaught exception: " << CurrentExceptionMessage() << '\n'; } else { Cerr << "Terminate for unknown reason (no current exception)\n"; } PrintBackTrace(); Cerr.Flush(); abort(); } [[maybe_unused]] auto _ = std::set_terminate(&FancyTerminateHandler); }