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