我想在C ++中设置一个全局异常处理程序。使用钩子,抛出的任何异常(指定类型)都会被处理程序捕获。有了这个,我可以在异常杀死程序之前进行一些漂亮的打印,或者也许我可以将所有内容写入日志文件。
boost似乎有一个异常处理程序钩子。 This似乎非常有希望,但提供的代码并没有像我认为的那样有效。我错过了什么吗?
struct my_handler
{
typedef void result_type;
void operator() (std::runtime_error const& e) const
{
std::cout << "std::runtime_error: " << e.what() << std::endl;
}
void operator() (std::logic_error const& e) const
{
std::cout << "std::logic_error: " << e.what() << std::endl;
throw;
}
};
void init_exception_handler()
{
// Setup a global exception handler that will call my_handler::operator()
// for the specified exception types
logging::core::get()->set_exception_handler(logging::make_exception_handler<
std::runtime_error,
std::logic_error
>(my_handler()));
}
// The above is all code from the boost doc example. Untouched.
int main(int argc, char* argv[]) {
init_exception_handler();
// I can throw now right...?
throw std::runtime_error("This should be suppressed!");
return 0;
}
在这段代码中,即使我认为我已经设置了异常处理程序,也不会抑制我抛出的runtime_error。