捕获琐碎的提升异常的奇怪问题
Weird issue with catching trivial boost exception
我对以下简单的代码有问题:
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> >
而另一个仅为CCD_ 4。
我的问题是:如何更好地调试这种情况?为什么它只在本地发生,而在另一个环境中却没有出现问题?我该如何防止这些奇怪的行为?
谢谢你的帮助!
您看到的奇怪类型是boost::exception_detail::clone_impl< boost::exception_detail::error_info_injector< boost::bad_lexical_cast>>
。它是Boost.Exception提供的bad_lexical_cast
的包装器(并从中派生),它提供了对boost::exception_ptr
和错误信息工具的支持。第一次接球时应该能很好地接住。
如果不是,这通常是不同动态库中RTTI信息冲突的结果。这是我唯一能想到的解释测试用例行为的方法。
相关文章:
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- 发生此错误:在0x0F2BFB7C(基于.dll)时引发异常 尝试更改大小是问题吗?
- 关于异常继承中的语法的问题
- 在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- Catch2 迫使我在异常中添加对 std::string 的强制转换,这会产生其他问题吗?
- (SDL 渲染问题)C++ 引发异常:读取访问冲突.这是无效的
- PCL 和 CMake 的问题:链接时未定义统计异常值删除
- 值传递、异常/断言和类设计.批评/问题
- 在使用SFML时,我会得到记忆或出于界限异常,这是什么问题
- 此C 异常语法有什么问题(std :: runtime_error)
- 递归中的异常问题(8皇后问题)
- 如何避免意外异常导致的问题
- 为什么我们需要 RAII 来解决异常安全问题
- 异常处理问题,原因
- 向量使用的异常问题
- c++基本异常问题
- C++ 中的 I/O 异常问题("cin"语句)
- 浮点异常问题
- 使用STL字符串和向量类的异常问题