boost::iostreams::mapped_file_sink 抛出未知异常
boost::iostreams::mapped_file_sink throws unknown exception
你们能帮我解密boost::iostreams::mapped_file_sink
抛出的未知异常吗?
我的配置
- 提升 1.51
- Windows 7 上的 Visual Studio 2012
- Ubuntu 上的 GCC 4.7
这是我有的代码
try
{
boost::iostreams::mapped_file_params params_;
boost::iostreams::mapped_file_sink sink_;
params_.length = 0;
params_.new_file_size = 1024;
params_.path = "./test.bin";
sink_.open(params_);
sink_.close();
}
catch (std::ios::failure& ex)
{
std::cout << "t" << "what: " << ex.what() << "n";
}
catch (std::system_error& ex)
{
std::cout << "t" << "code: " << ex.code() << " what: " << ex.what() << "n";
}
catch (std::runtime_error& ex)
{
std::cout << "t" << ex.what() << "n";
}
catch (boost::archive::archive_exception& ex)
{
std::cout << "t" << ex.what() << "n";
}
catch (boost::exception& ex)
{
std::cout << "blahn";
}
catch (std::exception& ex)
{
std::cout << "t" << ex.what() << " --- " << typeid(ex).name() << "n";
}
它总是在Windows中工作。
在 Ubuntu 中,它会创建给定大小的空文件,但在 open()
上抛出异常。 代码的后续执行(如果存在)不会导致异常。
最糟糕的是,我看不到异常的原因。我只能抓住std::exception
其what()
返回无意义的"std::exception"。
在绝望的尝试中,我输出了typeid(ex).name()
N5boost16exception_detail10clone_implINS0_19error_info_injectorISt9exception
根据谷歌的意思是:boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::exception> >
任何想法出了什么问题?
您可以在调试器中运行代码并在函数中设置断点,该断点实际上会引发异常,例如__cxa_throw
。系统上的函数名称可能不同:使用 nm -po program | less
并搜索包含 throw
的函数。在断点中设置一个断点,这些断点看起来很可能是由系统创建的。如果仅引发少量异常,还可以将断点设置为 std::exception::exception()
。
经过50分钟的猜测,我发现问题出在length
领域。文档没有这么说,但它的默认值必须是 -1,如源代码中所述
BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));
我直觉地假设,如果我将new_file_size
设置为大于零,它将忽略length
。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 继承期间显示未知行为的子类
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 输入中的字符串数未知(以字母表示)
- 具有未知值时的时间复杂性
- 示例代码 (C++) 中的未知异常格式
- 使用 .NET 4.5 和混合程序集时出现未知异常
- boost::iostreams::mapped_file_sink 抛出未知异常
- 如何调试未知代码中的异常
- 未处理的异常,原始未知
- gcc/clang:错误:未知类名"异常";你是说'std::exception'
- .NET 4.0在XP上出现未知异常,但在Windows 7上运行良好
- 来自IWbemClassObject::Get的未知异常
- C++ -- 为什么"什么"在捕获范围内打印"未知异常"?
- c++时间未知异常