【问题标题】:lcov: branches coverage of destructor missinglcov:析构函数的分支覆盖丢失
【发布时间】:2017-05-20 17:38:07
【问题描述】:

我的工作环境

  • cygwin

  • lcov 1.13

  • GCC 5.4.0

问题是 html 中的覆盖率报告告诉析构函数中缺少分支,但析构函数为空。我不知道为什么。 任何人都可以帮助我吗? 我也尝试使用 GCC 4.8.0 但结果相同

【问题讨论】:

    标签: c++ code-coverage lcov


    【解决方案1】:

    我遇到了同样的问题,我找到了this on stackoverflow。 简短的回答是,有不同类型的析构函数,这取决于您是删除动态分配的对象,还是静态分配的对象被破坏。

    所以要摆脱这个缺失的分支覆盖,你必须用

    创建一个对象
    TestClass* a = new TestClass();
    

    TestClass b;
    

    然后确保它们都被销毁,当然,前者与

    delete a;
    

    那么这两种析构函数都应该被调用。

    【讨论】:

    • 我将对象创建为“TestClass b;”析构函数已经调用,但它缺少分支
    【解决方案2】:

    一个简单的解决方案是将// GCOVR_EXCL_LINE 作为注释添加到您知道没有执行两个分支的行中。我认为这对于这种情况是一个好主意,因为据我了解,没有其他方法可以强制 GCOV 同时采用析构函数的动态和非动态分支。

    例如:

    TestClass *a = new TestClass;
    delete a; // GCOVR_EXCL_LINE
    

    将从覆盖报告中排除delete a; 行。

    有关详细信息,请参阅以下内容: https://gcovr.com/en/master/guide.html#exclusion-markers

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2012-11-02
      • 2019-11-05
      • 2017-02-12
      • 2014-01-18
      • 1970-01-01
      相关资源
      最近更新 更多