gpt4 book ai didi

c++ - boost::iostreams::mapped_file_sink 抛出未知异常

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:47 25 4
gpt4 key购买 nike

你们能帮我破译 boost::iostreams::mapped_file_sink 抛出的未知异常吗? ?

我的配置

  • boost 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 << "blah\n";
}
catch (std::exception& ex)
{
std::cout << "\t" << ex.what() << " --- " << typeid(ex).name() << "\n";
}

它始终适用于 Windows。

在 Ubuntu 中它创建给定大小的空文件但在 open() 上抛出异常. if exists 代码的后续执行不会导致异常。

最糟糕的是我看不到异常的原因。我只能抓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() 中设置断点。

关于c++ - boost::iostreams::mapped_file_sink 抛出未知异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com