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

标签 c++ exception terminate-handler

我目前遵循 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/

相关文章:

c++ - Libcurl 进度回调不适用于 multi

delphi - 主应用程序单元结束后可以捕获异常吗?

C++11 和异步,它是如何工作的?

c++ - 如何在 C/C++ 中声明 16 位二进制字符?

c++ - 防止重新定义构造函数定义的方法

c# - BinaryFormatter 异常

c++ - 如何捕获因无效内存块被销毁而导致的错误

c++ - 终止处理程序可以抛出异常吗?

c++ - 为什么内存屏障不只阻塞每个特定内存地址的指令?