c++ - 在 GDI 资源不足时以编程方式捕获 Windows 关闭事件

标签 c++ debugging exception-handling error-handling gdi

我试图在我的过程中捕获所有意外终止。

我已经使用这些函数来捕获我能想到的所有未处理的错误和异常,但这仍然不够:

    SetUnhandledExceptionFilter(OnUnhandledNativeException);

    set_terminate(set_terminateHandler);

    set_unexpected(set_unexpectedHandler);

    _set_purecall_handler(set_purecallHandler);

    _set_new_handler(HandleProgramMemoryDepletion);       

    _set_invalid_parameter_handler(InvalidParameterHandler);

    signal(SIGABRT, sigabrt_handler); 
    signal(SIGINT, sigabrt_handler);
    signal(SIGTERM , sigabrt_handler);

这些函数几乎可以捕获应用程序中的任何错误。

但是,当应用程序由于 GDI 故障(例如 GDI 资源不足)而终止时,不会调用这些函数。

有谁知道我如何捕捉 GDI 错误事件?
我确信必须有某种方法来重载它并更改回调函数。

而且,有没有人知道这些功能还不够的其他奇怪场景?

注:

它没有捕获的确切错误是“所需资源不可用”。
这是当您创建大量 GDI 对象并且不释放它们时引起的。
该程序将崩溃,因为在内存耗尽之前没有足够的资源。

最佳答案

  • 您列出的一些函数(例如 SetUnhandledExceptionFilter)设置了当前线程的处理程序。因此,您应该在每个线程中调用它们。
  • 您可以将向量化异常处理添加到列表 (AddVectoredExceptionHandler)。
  • 关于c++ - 在 GDI 资源不足时以编程方式捕获 Windows 关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702343/

    相关文章:

    c++ - 在cpp中使用unix系统调用

    c++ - 为 iOS 构建 ICU

    ruby - 是否有可能获得引发错误的行号?

    xml - 您如何在 Linq To Xml 中防范 Null Reference 异常?

    ruby - 无法挽救 YAML.load 异常

    c++ - 我应该在移动构造函数/赋值运算符中使用 std::move 还是 std::forward?

    c++ - CRTP 中未实现的派生函数

    iPhone调试: Get a black screen when debugging a universal app

    iphone - 我可以在 Xcode 4 中针对 OpenGL 错误触发断点吗?

    PhpStorm - 无法接受外部 Xdebug 连接