问题很简单,但我无法弄清楚如何做到这一点。我想得到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_error
或boost::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
答案 0 :(得分:0)
这应该没问题:
#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