编辑:已解决。问题更加温和 - 我有两个函数在一行代码中互相调用 - 使用lexical_cast
和其他一个崩溃。有趣的是,我只能通过喷洒很多cout
的信息来发现这个问题,因为在碰撞时没有回溯,并且当调试线路成为线路时,gdb出于任何原因显示错误的lexical_cast
是罪魁祸首(并且我没有别看另一个,叹气)。谢谢您的帮助!在共享库中提升异常
我使用的是gcc 4.1.2和boost 1.48。我有一个共享库的模板函数内部下面的代码:
try {
boost::lexical_cast<T>(s);
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
转换失败,但异常不会被逮住(它确实繁殖和终止程序,但这种赶超条款没有按赶不上)。 T
是long
和s
是std::string
等于"234a234"
。 (我也试过包装在#pragma GCC visibility push(default)
包括提升包括在内,并且还尝试在链接时添加-shared-libgcc
标志,并且没有做任何事情。)
虽然它变得更好。在以下两种情况下的例外情况被逮住:
try {
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
和令人惊讶这一个:
try {
boost::lexical_cast<T>(s);
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
上发生了什么事情,更重要的任何想法如何解决这一问题?
为什么抓不住的boost :: bad_lexical_cast&或std ::例外&呢?它不回答你的问题,但也许它会帮助编译器。 – Joel 2012-01-06 19:44:44
试过 - 没有帮助:( – eddi 2012-01-06 19:48:47