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

Unhandled Exception Handler in c++

我正在开发一个 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 处的提升堆栈跟踪到 return 记录的回溯。

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