[英]boost::iostreams::mapped_file_sink throws unknown exception
你能幫我解決由boost::iostreams::mapped_file_sink
拋出的decypher未知異常嗎?
我的配置
這是我的代碼
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
其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
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.