抓住未知的例外

Iun*_*own 6 c++ mfc exception-handling

在我的代码的发布版本中,一行抛出异常,我不知道它是什么类型的异常,所以我无法正确捕获它或找出问题.

我使用了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");
  }
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法获得抛出未知异常的任何细节?只是一种类型会很棒.

谢谢

Mac*_*cke 6

不是真的,它可能是一个int,一个const char*或一个RhubarbPie超级智能指针.

然而:

  • 尝试捕捉std::exception.这将捕获许多C++本机异常.
  • 您的异常可能是.NET异常,因此请尝试捕获该异常,而不是MFC Base异常.(看起来你正在做C++/CLI.在这种情况下,.NET-exceptions最终会出现在catch-all子句中)
  • 此外,异常通常意味着在C++中通过引用捕获(更新:MFC显然使用了指针的throw-and-catch.这也是有效的,只要你捕获被抛出的东西.)
  • 它也可能有助于使用__try和__catch,因为一些"硬件"异常,如堆栈溢出,访问冲突等,在Windows上也是未知的异常.捕获它们的语法有点不同,但是您获得了一个异常标识符,可用于报告抛出的异常类型.我用它在我们的应用程序中打印致命错误的堆栈跟踪.