从谷歌日志记录库的CHECK宏中捕获C++异常

gcs*_*osh 6 c++ exception try-catch

我正在使用一个库,该库使用google日志库记录错误并使用CHECK宏检查断言.在我的代码中,我想在CHECK条件失败时捕获异常(例如,当应用程序因为它不存在而无法打开文件时),但即使使用catch(...)它也没有捕获任何内容并且程序崩溃而没有控制.

有没有办法在CHECK宏失败时捕获异常?或者,如果不可能,是否有解决方法来处理这些情况?

lin*_*lin 0

glog官方文档中提到,可以使用

用户定义的失效函数

替换默认的 exit() 行为。

例子:

   void YourFailureFunction() {
     throw exception();
   }
   int main(int argc, char* argv[]) {
     google::InstallFailureFunction(&YourFailureFunction);
   }
Run Code Online (Sandbox Code Playgroud)

但是,该函数是在析构函数中调用的,因此该行为可能不适合我们的需求。在我的情况下,该函数被调用两次,我必须实现一些不太漂亮的 hack 来防止异常被抛出两次。

bool alreadyThrown = false;
void YourFailureFunction() {
    if (!alreadyThrown)
    {
        alreadyThrown = true;
        throw exception();
    }
}
Run Code Online (Sandbox Code Playgroud)