1

我的 Windows 应用程序使用以下用于打开文件的 C++/MFC 代码:

CFileDialog fd(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER, 
    NULL, hParentWnd ? CWnd::FromHandle(hParentWnd) : NULL);

fd.m_pOFN->Flags &= ~(OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_NODEREFERENCELINKS);
fd.m_pOFN->Flags |= OFN_FILEMUSTEXIST;

INT_PTR nRes = fd.DoModal();    //This call causes the warning

它运行良好,但我在 VS 2008 的调试器输出窗口中收到以下消息:

MyApp.exe 中 0x00007ffb653d5bf8 的第一次机会异常:0x000006BA:RPC 服务器不可用。

这是我需要关心的事情吗?

4

1 回答 1

1

打破第一次机会异常可能有用的原因是:

  • 乍一看,异常似乎已处理,但实际上并非如此。(您的应用程序确实有一个异常处理程序,但它最终会重新抛出异常。)
  • 异常似乎已由调试器处理,但实际上并非如此。(您的应用程序确实有一个异常处理程序,但它只是记录异常并中止程序。与上述类似。)
  • 异常已处理,但指向应修复的更深层次的问题。

打破第一次机会异常可能无用的原因是:

  • 异常已处理,并且不指向您应该担心的任何事情。
  • 异常已被处理,并且确实指向一个真正的问题,但无法修复,只能处理。

调试器无法知道哪些适用,那是您作为开发人员的工作。根据问题中的信息,我猜这是第四个要点,这意味着在引发此类异常时最好不要让调试器中断。

一般来说,如果您收到第一次机会异常消息,但一切正常,则可能没什么好担心的。这意味着有一个异常,但异常被捕获并且看似正确处理。

于 2014-07-19T23:38:31.720 回答