我目前遵循 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: %s\n", ex.what());
}
关于c++ - 从终止处理程序访问所有未捕获的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118020/