如何从boost异常中正确解开错误代码

时间:2018-01-20 14:24:45

标签: c++ boost exception-handling

问题很简单,但我无法弄清楚如何做到这一点。我想得到system_error,并从那里得到具体的错误代码。我在错误中有类似的东西:

Dynamic exception type: boost::exception_detail::clone_impl<boost::exception_detail::current_exception_std_exception_wrapper<std::runtime_error> >
std::exception::what:
boost::system::system_error

我可以直接看到boost::exception但不能std::runtime_errorboost::system_error

try {

        this->service_.run();
    }
    catch (boost::system::system_error const & e) {
                i_->playerLog->info("Exiting with system error. Error code: {} -- What: {}", e.code().value(),
                                    e.what());
            }
 catch (boost::exception const & e) {
    i_->playerLog->info("Exiting with boost exception: {}", boost::diagnostic_information(e));
 }

我的代码将输入boost :: exception子句,但不会输入system_error或runtime_erro

1 个答案:

答案 0 :(得分:0)

这应该没问题:

Live On Coliru

#include <boost/asio.hpp>
#include <iostream>

int main() {
    try {
        using namespace boost::asio;
        io_service svc;
        ip::tcp::acceptor a(svc);
        a.open(ip::tcp::v4());

        a.bind({{}, 22}); // error, need admin privs
    } catch(boost::system::system_error const& e) {
        std::cout << e.what() << ": " << e.code() << " - " << e.code().message() << "\n";
    }
}

打印

bind: Permission denied: system:13 - Permission denied

如果它没有,通常你会有一些动态加载的库与不匹配的类型信息。

奖金

为了完整性,使用更详细的异常信息进行测试: Live On Coliru