C++ boost::iostreams::映射的\u文件\u接收器引发未知异常
你们能帮我解决由C++ boost::iostreams::映射的\u文件\u接收器引发未知异常,c++,linux,exception,boost,memory-mapped-files,C++,Linux,Exception,Boost,Memory Mapped Files,你们能帮我解决由boost::iostreams::mapped\u file\u sink引发的未知异常吗 我的配置 增压1.51 Windows 7上的Visual Studio 2012 Ubuntu上的GCC4.7 这是我的密码 try { boost::iostreams::mapped_file_params params_; boost::iostreams::mapped_file_sink sink_; params_.length = 0;
boost::iostreams::mapped\u file\u sink
引发的未知异常吗
我的配置
- 增压1.51
- Windows 7上的Visual Studio 2012
- Ubuntu上的GCC4.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 << "blah\n";
}
catch (std::exception& ex)
{
std::cout << "\t" << ex.what() << " --- " << typeid(ex).name() << "\n";
}
根据谷歌的说法,这意味着:boost::exception\u detail::clone\u impl
有什么问题吗?您可以在调试器中运行代码,并在函数中设置一个实际引发异常的断点,例如,
\ucxa\u throw
。系统上的函数名称可能不同:使用nm-po程序| less
并搜索包含throw
的函数。在最有可能由系统创建的断点中设置断点。如果抛出的异常很少,您还可以在std::exception::exception()
中设置断点。经过50分钟的猜测,我发现问题出在length
字段中。文档中没有这样说,但是它的默认值必须是源代码中规定的-1
BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));
BOOST_STATIC_常量(size_类型,max_length=STATIC_cast(-1));
我直觉地认为,如果我将
new\u file\u size
设置为大于零,它将忽略length
谢谢你的提示!我不太熟悉Linux工具,因为我是在VisualStudio中开发的。
BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));