我正在使用第 3 方库编译我的程序。如果内部发生错误,该库包含一个错误回调。在那个错误回调中,我抛出了一个异常,并且我有一个单元测试来验证当我做一些无效的事情时是否抛出了异常。这一切在 Windows 中运行得非常好,但是当我在 linux (fedora) 中测试它时,我从一个未捕获的异常中得到了中止。
我尝试用 try-catch block 直接包装我的调用,但没有成功。 (此外,我所有的代码都在谷歌测试框架内运行,该框架通常也会捕获异常)。唯一似乎捕获异常的是,如果我将 throw 语句直接包装在错误回调中的 try block 中。
有没有人知道为什么会发生这种情况,是否有办法捕获异常?
最佳答案
当你interface with third-party libraries你通常必须在你的代码和他们的代码之间的边界上捕获所有异常:
int yourCallback( params )
{
try {
doStuff( params );
return Okay;
} catch (...) {
return Error;
}
}
原因是您无法确定该库是用 C++ 编写的,还是它使用与您的代码使用的 C++ 运行时版本完全相同。
除非您完全确定代码可以处理您的异常,否则您不能将异常传播到第三方代码。极端的例子是 COM,您的代码和“其他代码”都可以使用任何语言和任何运行时,并且您不允许让异常通过 COM 边界传播。
关于c++ - 来自第 3 方静态库的回调中未捕获的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6253574/