从终止处理程序访问所有未捕获的异常



我目前正在遵循C++核心准则,将代码中的所有析构函数设置为noexcept。我的一些析构函数可能会引发异常 - 在这种情况下,我希望程序崩溃并提供有关导致崩溃的原因的详细信息。在析构函数上设置noexcept说明符将调用std::terminate()进而调用默认terminate_handler。默认terminate_handler将打印在析构函数内部触发的异常。这在抛出另一个异常时未调用抛出析构函数的情况下非常有用。在这种情况下,我希望terminate_handler打印这两个异常,以便我首先知道是什么触发了错误处理路径。

问题是我似乎无法在标准库中找到获取未捕获异常的方法。有一个std::current_exception()函数获取正在处理的异常,std::uncaught_exceptions()函数仅获取未捕获的异常数。我想得到一个std::exception_ptr或其他东西来对待未捕获的异常。这可能吗?

参见:https://www.danielseither.de/blog/2013/12/globally-handling-uncaught-exceptions-and-signals-in-c/

std::exception_ptr exptr = std::current_exception();
try {
std::rethrow_exception(exptr);
}
catch (std::exception &ex) {
std::fprintf(stderr, "Terminated due to exception: %sn", ex.what());
}

最新更新