3

我目前正在遵循 C++ 核心指南,将我的代码中的所有析构函数设置为noexcept. 我的一些析构函数可能会抛出异常——在这种情况下,我希望程序崩溃并为我提供导致崩溃的详细信息。noexcept在析构函数上设置说明符将调用std::terminate()它依次调用默认值terminate_handler。默认terminate_handler将打印在析构函数中触发的异常。这在抛出另一个异常时未调用抛出析构函数的情况下非常有用。在那种情况下,我想terminate_handler打印两个异常,这样我就可以知道是什么触发了错误处理路径。

问题是我似乎无法在标准库中找到获取未捕获异常的方法。有一个std::current_exception()函数可以获取正在处理的异常并且std::uncaught_exceptions()只获取未捕获异常的数量。我想std::exception_ptr对未捕获的异常进行处理。那可能吗?

4

1 回答 1

-1

见: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());
}
于 2019-12-24T14:00:47.503 回答