我使用的是一个利用Google日志记录库来记录错误并使用CHECK宏检查断言的库。在我的代码中,我想在CHECK条件失败时捕获异常(例如,当应用程序因为不存在而无法打开文件时),但即使使用catch(...)
它也没有捕获任何内容程序崩溃而无法控制。
有没有办法在CHECK宏失败时捕获异常?或者,如果不可能,是否有解决方法来处理这些情况?
答案 0 :(得分:0)
如glog的official document中所述,您可以使用
用户定义的失败函数
替换默认的exit()行为。
示例:
void YourFailureFunction() {
throw exception();
}
int main(int argc, char* argv[]) {
google::InstallFailureFunction(&YourFailureFunction);
}
但是,在析构函数中调用该函数,因此行为可能不适合我们的需要。在我的情况下,函数被调用两次,我必须实现一些不那么漂亮的黑客,以防止异常被抛出两次。
bool alreadyThrown = false;
void YourFailureFunction() {
if (!alreadyThrown)
{
alreadyThrown = true;
throw exception();
}
}