C++ 中未处理的异常处理程序

Unhandled Exception Handler in c++

本文关键字:异常处理程序 未处理 C++      更新时间:2023-10-16

我正在开发一个C++库,我希望能够捕获任何未被try/catch语句捕获的异常。

在谷歌搜索时,我唯一能找到的就是一个catch(...)块,但这行不通,我希望库能够捕获任何通常会导致崩溃的东西。就像 C# 中未经处理的异常处理程序一样。

看起来不像在 c++ 中有任何这样的事件处理程序。相反,我在想的是SIGSEGVSIGABRT之类的东西注册一个信号处理程序,然后在我收到信号时处理崩溃。

这是最好的方法,还是还有其他选择来实现我想要实现的目标?

我已经设法找到了一种方法来在某种程度上实现这一点。

正如@user4581301指出的那样,如果指针问题或内存问题可能导致sigsegvsigabrt,我可能无法做任何事情,因为如果发生这种情况,主应用程序可能不可逆转地搞砸了,所以无法做任何远程有用的事情。

但是,如果抛出未捕获的异常,我找到了捕获它的方法。

当我的库初始化时,我执行以下操作:

if (currentTerminationHandler == nullptr)
{
currentTerminationHandler = std::get_terminate();
std::set_terminate(&unhandledTerminateHandler);
}

然后,unhandledTerminateHandler 方法在 https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace.html 处使用 boost 堆栈跟踪返回记录的回溯跟踪。

请注意,在 Visual Studio 中运行时执行此操作时,VS 会在触发终止处理程序之前捕获崩溃并阻止终止触发器触发,因此要解决此问题,您需要使用 ctrl+F5 运行以避免它在 VS 调试器中运行。