スローされた未知の例外を解読するのを手伝ってくれませんboost::iostreams::mapped_file_sink
か?
私の構成
- 1.51ブースト
- Windows7上のVisualStudio2012
- 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";
}
それは常にWindowsで動作します。
Ubuntuでは、指定されたサイズの空のファイルを作成しますが、例外をスローしopen()
ます。存在する場合、その後のコードの実行は例外を引き起こしません。
最悪なのは、例外の理由がわからないことです。意味のない「std::exception」std::exception
が返されるものしかキャッチできません。what()
何が悪いのかを必死に調べて、次のように出力typeid(ex).name()
します。
N5boost16exception_detail10clone_implINS0_19error_info_injectorISt9exception
グーグルによると、これは次のことを意味します:boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::exception> >
何が問題なのですか?