0

我正在将 Boost 用于一些内部代码。在main(),我想在退出程序之前捕获并记录所有 boost::exceptions。

如何捕获 boost::exceptions 并将异常信息作为字符串检索以进行日志记录?

4

1 回答 1

3

我建议你看看boost::diagnostic_information

这是一个给你的例子。它绝不是完整的,需要一些定制才能让它完全按照你的意愿去做。

void main()
{
    try
    {
        // Your code that can throw.
    }
    catch (const boost::exception& ex) 
    {
        // Output some debug information.
        std::cerr << boost::diagnostic_information(ex) << std::endl;

        // Here we can choose to perform some graceful-shutdown activities,
        // and/or rethrow the exception, triggering a call to std::terminate().
        throw; // Rethrow.
    }
    catch (const std::exception& ex) 
    {
        // Let's do the same for std::exception just for comparison.
        std::cerr << ex.what() << std::endl;
        throw; // Rethrow.
    }
}

您可能需要自定义的地方:

  • 在 main 中重新抛出触发std::terminate(). 您可能希望执行一些更优雅地关闭代码的任务。

  • std::cerr可能不是为您发送此类信息的好地方。也许您想将其记录到文件中。或者您可能希望将 std::cerr 重定向到文件

  • 您的代码可能会抛出不是 aboost::exception或 a 的东西std::exception。也许你想要一个全部的东西:catch (...)

  • 请记住,这是 try-catch 块仅在应用程序的主线程上发挥作用。您必须在任何其他可能引发未处理异常的线程的入口点执行类似的操作。

  • 这不能替代整个应用程序中正确的异常处理。

于 2013-01-01T18:27:40.667 回答