0

我有使用 3rd 方库的代码。

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

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

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

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

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

原__除了:

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

新__除了:

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

1 回答 1

1

仅供参考,您的异常过滤器中的第一个表达式eps = GetExceptionInformation()似乎未使用。

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

如果这没有捕获您的异常,则库可能正在尝试处理异常本身,并且库本身正在发生一些奇怪的事情。我会与图书馆的提供者核实,并询问这是否是一个已知问题。

于 2016-11-30T16:38:22.610 回答