c++ - Windows默默捕捉到的异常,如何手动处理?

标签 c++ windows mfc exception message-pump

当异常在消息泵中抛出时,我们遇到了 Windows 静默处理异常并允许应用程序继续运行的问题。例如,我们创建了一个测试 MFC MDI 应用程序,并覆盖了 OnDraw:

void CTestView::OnDraw(CDC* /*pDC*/)
{
    *(int*)0 = 0; // Crash

    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: add draw code for native data here
}

在运行应用程序时,您可能会收到令人讨厌的错误消息,但实际上您什么也得不到。该程序似乎运行得很好,但是如果您检查输出窗口,您将看到:

First-chance exception at 0x13929384 in Test.exe: 0xC0000005: Access violation writing location 0x00000000.
First-chance exception at 0x77c6ee42 in Test.exe: 0xC0150010: The activation context being deactivated is not active for the current thread of execution.

我知道为什么我会收到应用程序上下文异常,但为什么它被静默处理?这意味着我们的应用程序在使用时可能会遇到严重的问题,但我们永远不会知道,因为我们的用户永远不会报告任何问题。

最佳答案

如果您在 x64 操作系统上运行,您可能已经被这个问题困扰了:

http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/

或者(在这种情况下不太可能),它可能是这样的: http://blogs.msdn.com/b/oldnewthing/archive/2011/01/20/10117963.aspx

关于c++ - Windows默默捕捉到的异常,如何手动处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622200/

相关文章:

c++ - Visual Studio 中的 native C++ 程序

c++ - "final"C++ 中的类实现

ruby - 有没有办法让 ruby​​installer 与 cygwin 兼容?

c++ - 最小化、最大化按钮无缘无故消失

visual-c++ - 在 MFC+ATL EXE 中使用带有未注册接口(interface)的 IDispatchImpl

c++ - 如何设置 native 远程调试?

c++ - 命令模式队列按时间排序?

c++ - 通过不同的线程填充std::vector

json - 将一个目录中的所有 JSON 文件合并到一个文件中 - Windows

windows - Node.js 0.5.x 的递归目录创建