如何使用set_unexpected(my_unexpected())检索有关未处理异常的信息?

时间:2015-05-21 13:15:15

标签: c++ unhandled-exception

如何使用以下机制获取有关未处理异常的信息(类型+堆栈),在异常代码的深处抛出:

set_unexpected(my_unexpected())?

我怀疑这是可能的。有没有其他方法如何获得异常类型,在最好的情况下甚至调用堆栈的未处理抛出的地方?

1 个答案:

答案 0 :(得分:0)

我已经浏览了一些,发现了一些有用的东西。

我的问题可以改写:我如何复活未处理的异常。 这是一个解决方案:

// resurrect gone exception here
std::string ResurrectException()
{
   try 
   {
       throw;
   } 
   catch (const std::exception& e) 
   {
       return e.what();
   }
   catch (int intEx) 
   {
       char buffer[2];       
       sprintf(buffer,"%d",intEx);
       std::string outStr = buffer;
       return buffer;
   }
   catch (std::string strEx)
   {
        return strEx;
   }
   catch (char * buffEx)
   {
       std::string outStr = buffEx;
       return outStr;
   }
   // } catch (my_custom_exception_type& e) {
   //    return e.ToString(); }
   catch(...) 
   {
       return "unknown exception!";
   }
}

See here for details

我只是想知道该部分"获取抛出异常的地方的堆栈"。在C#标准中,System.Exception类将有关堆栈的信息作为字符串成员传递。不幸的是,我在C ++标准系统异常中没有看到这一点。