我如何使用boost的set_exception_handler?

时间:2015-04-07 05:50:04

标签: c++ boost

我想在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。

0 个答案:

没有答案