如何__try __except不能在C ++中捕获错误

时间:2016-11-30 16:08:02

标签: c++ error-handling system-error

我有使用第三方库的代码。

该库会引发偶尔的访问冲突异常。一个基本的try / catch没有捕获错误,程序会很难崩溃。

我能够使用__try __except来捕获错误,记录错误,然后优雅地退出程序。

第三方刚刚更新了他们的库,现在导致访问冲突错误的一小部分记录在生产中死亡,而#34; [程序名称]已停止工作"

在Visual Studio中,当我逐步执行时,Microsoft Visual Studio C运行时库在[程序名称]中检测到致命错误。"

我已经更新了我的__except语句以捕获所有内容(或者我相信),但它仍然会发生。

原创__except:

__except (eps = GetExceptionInformation(), ((GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) 
              ? EXCEPTION_EXECUTE_HANDLER 
              : EXCEPTION_CONTINUE_SEARCH)) {
        sprintf("error message");
        result = 99;
}

新__except:

__except (eps = GetExceptionInformation(), ((1 == 1)
              ? EXCEPTION_EXECUTE_HANDLER 
              : EXCEPTION_CONTINUE_SEARCH)) {
        sprintf("error message");
        result = 99;
}

1 个答案:

答案 0 :(得分:0)

只是一个友好的FYI,您的例外过滤器eps = GetExceptionInformation()中的第一个表达式似乎未被使用。

此外,如果您想捕获所有异常,那么__except (EXCEPTION_EXECUTE_HANDLER)应该就是您所需要的。虽然我只建议用于调试目的。

如果这不能捕获您的异常,那么库可能正在尝试处理异常本身,并且库本身正在进行一些时髦的事情。我会咨询图书馆的提供者,并询问这是否是一个已知问题。