Dev*_*Das 7 c++ exception-handling global
我可以在C++中实现全局异常处理吗?我的要求是try ...在一段代码中没有使用catch块然后应该有一个全局异常处理程序来处理所有未捕获的异常.
我能做到的话,请给您的宝贵建议:)
我也想做同样的事情,这就是我的想法
std::set_terminate([]() -> void {
std::cerr << "terminate called after throwing an instance of ";
try
{
std::rethrow_exception(std::current_exception());
}
catch (const std::exception &ex)
{
std::cerr << typeid(ex).name() << std::endl;
std::cerr << " what(): " << ex.what() << std::endl;
}
catch (...)
{
std::cerr << typeid(std::current_exception()).name() << std::endl;
std::cerr << " ...something, not an exception, dunno what." << std::endl;
}
std::cerr << "errno: " << errno << ": " << std::strerror(errno) << std::endl;
std::abort();
});
Run Code Online (Sandbox Code Playgroud)
除了检查 What() 之外,它还检查 ernno/std::strerror() - 将来我也打算通过 exeinfo/backtrace() 添加堆栈跟踪
以防catch(...)万一有人抛出异常以外的东西..例如throw 1;( throw int :| )
我总是将最外层的函数包装在try-catch中,如下所示:
int main()
{
try {
// start your program/function
Program program; program.Run();
}
catch (std::exception& ex) {
std::cerr << ex.what() << std::endl;
}
catch (...) {
std::cerr << "Caught unknown exception." << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
这将抓住一切。在C ++中,良好的异常处理不是要遍历编写try-catch,而是要捕获您知道如何处理它的位置(就像您似乎想做的那样)。在这种情况下,唯一要做的就是将错误消息写入stderr,以便用户可以对其执行操作。