【发布时间】:2015-04-20 15:38:13
【问题描述】:
我对以下简单代码有疑问:
try
{
boost::lexical_cast<unsigned int>("invalid string");
}
catch(::boost::bad_lexical_cast &)
{
//It's not catched!!!
return;
}
catch (std::exception &e){
std::cerr << boost::diagnostic_information(e) << std::endl;
::boost::bad_lexical_cast s;
std::string ss = typeid(s).name();
std::cout << "'" << s.what()<<"': '"<< ss <<"'";
std::string ee = typeid(e).name();
std::cout << "'" << e.what()<<"': '"<< ee <<"'";
}
lexical_cast 抛出的 boost::bad_lexical_cast 异常与我尝试捕获的异常不同,因此第一个捕获被简单地忽略。
一个例外是以下类型:
(损坏)
N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEE
那是一个:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >
而另一个只是boost::bad_lexical_exception。
我的问题是:我怎样才能更好地调试这种情况?为什么它只发生在本地,而在另一个环境中问题没有出现?我怎样才能防止这些奇怪的行为?
感谢您的帮助!
【问题讨论】:
标签: c++ boost exception-handling