【问题标题】:Catch Boost exception捕获 Boost 异常
【发布时间】:2013-07-19 07:57:40
【问题描述】:

icmp::resolver::query query(icmp::v4(), host, "");destination = *resolver.resolve(query); 的帮助下解析主机名时,当无法解析主机名时出现异常。现在我想捕捉那个异常,但它没有被捕捉到。我现在的代码是:

        icmp::resolver::query query(icmp::v4(), host, "");  
        try
        {
            destination = *resolver.resolve(query);                                         
        }
        catch(boost::exception & e)
        {
             //Print exception
        } 
        catch (...) {
            //print exception   
        }

我做错了什么?

更新:该应用程序是在 Visual Studio 2012 中制作的,具有 C++ 非托管和托管 (.net) 代码。 boost的版本是1.54.0

【问题讨论】:

  • 会不会在第一行代码就崩溃了?
  • @computergek92 捕获 boost::system::error_code 而不是 boost::exception。
  • @ForEveR 如果是这样,那么... 应该已经抓住了它
  • 您能详细说明崩溃本身吗? VS的异常助手会导致调试器进入执行中断吗?或者,您可以对resolver::resolve() 使用不抛出重载。
  • @computergek92:对不起。我很好奇调试器是否正在观察异常。问题是否在sscce 中体现出来?

标签: c++ exception boost exception-handling boost-asio


【解决方案1】:

我已经解决了这个问题,但没有使用 icmp::resolver 函数的重载函数,该函数会给出错误代码。然后我在迭代器上得到一个空指针异常并解决它没有指向resolver.resolve(query,ec)的指针

        {
            icmp::resolver::query query(icmp::v4(), host, "");
            iter = resolver.resolve(query, ec);
            if (!ec) 
            {
                destination = *iter;
            } 
            else 
            {
                ec.value();
            }
       }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多