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

标签 c++ exception try-catch

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

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

最佳答案

official document 中所述的 glog,你可以使用

User-defined Failure Function

替换默认的 exit() 行为。

例子:

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

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

bool alreadyThrown = false;
void YourFailureFunction() {
    if (!alreadyThrown)
    {
        alreadyThrown = true;
        throw exception();
    }
}

关于c++ - 从谷歌日志库的 CHECK 宏中捕获 C++ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164384/

相关文章:

c# - 未处理C#NullReferenceException-未将对象引用设置为对象的实例

python - 是否为内置 python 函数记录了所有异常?

Python:在满足特定条件时跳过代码块(计算)而不使用 "if"语句

c++ - 在WinCE上调试时,如何设置Visual Studio总是加载它知道的符号文件?

c# - 位移和数据解释

java - while循环忽略try-catch

c# - 我可以执行多个 Catch block 吗?

java - Java中无法访问的返回语句

c++ - 执行不同操作的模块化函数的算法?

c++ - 此信封实现是否正确使用 C++11 原子?