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

C++ 如何使用set_unexpected(my_unexpected())检索有关未处理异常的信息?,c++,unhandled-exception,C++,Unhandled Exception,如何使用以下机制获取有关未处理异常的信息(类型+堆栈),这些异常是在奇怪代码的深处抛出的: 设置意外(my_unexpected()) 我怀疑这是可能的。有没有其他方法可以获取异常类型,最好的情况下甚至是未处理抛出所在位置的调用堆栈?我浏览了一下,发现了一些有用的东西 我的问题可以重新表述:如何恢复未处理的异常。 以下是一个解决方案: // resurrect gone exception here std::string ResurrectException() { try {

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

设置意外(my_unexpected())


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

我浏览了一下,发现了一些有用的东西

我的问题可以重新表述:如何恢复未处理的异常。 以下是一个解决方案:

// 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!";
   }
}


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

如果你在Linux上,未处理的异常通常会堆芯。使用gdb打开core并检查stacktrace。“未处理”(未捕获)与“意外”(违反异常规范)不同。不幸的是,在这两个处理程序中都没有平台无关的信息可供检索——您所知道的只是某个地方发生了一些事情。不幸的是,出于商业原因,我不得不在abbandon Linux上工作,现在为黑暗面工作:D