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

时间:2019-07-09 16:47:22

标签: c++ unhandled-exception

我正在C ++库上工作,我希望能够捕获try / catch语句未捕获的任何异常。

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

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

这是最好的方法吗?或者是否有其他选择可以实现我想要实现的目标?

1 个答案:

答案 0 :(得分:0)

我设法找到一种在某种程度上实施该方法的方法。

正如@ 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 stacktrace返回记录的回溯。

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