在我的代码的发布版本中,有一行抛出了异常,我不知道它是什么类型的异常,所以我不能正确地捕获它或找出问题所在。
我使用catch(...)但这几乎毫无价值。
下面是一些伪代码
try
{
m_mmwIPC = gcnew NiftyIPC(gcnew String("Monitor"), true);
}
catch (CException* e)
{
TCHAR szCause[255];
e->GetErrorMessage(szCause, 255);
CString errorStr = szCause;
RemoveLineFeeds(errorStr);
OutputDebugString(errorStr);
}
catch(...)
{
OutputDebugString(L"Unknown exception\n");
}那么,有没有办法获得抛出的未知异常的详细信息呢?只要一种类型就很好了。
谢谢
发布于 2011-07-08 21:29:15
不是真的,它可能是一个int,一个const char*或者一个RhubarbPieü-智能指针。
但是:
std::exception。这将捕获大量MFC exceptions.-
发布于 2011-07-08 21:30:32
当您指定使用MFC时,我将假设您使用的是Visual Studio的某个版本。如果是这种情况,并且能够在调试模式下运行程序,则可以将调试器设置为在出现未处理的异常时中断。这将需要删除代码的catch(...)部分,但它应该在正确的位置进入调试器,并为您提供有关异常本身的有用信息。
我建议您参考微软文档here和here。
发布于 2011-07-08 21:33:17
每个异常都应该从std::exception派生出来,然后你就可以使用RTTI了。标准catch块是
catch (const std :: exception & e) {
// e .what ();
// typeid (e);
}
catch (...) {
// WTF ?!?!?
}在c++0x中,您可以使用std::current_exception,也许还可以将exception_ptr传递到某个聪明的库中进行分析。
请记住,异常可以是内置的,也可以是没有RTTI的其他类型,这就是为什么你应该总是从std::exception派生的原因。
https://stackoverflow.com/questions/6625046
复制相似问题