【发布时间】:2017-05-20 17:38:07
【问题描述】:
我的工作环境
cygwin
lcov 1.13
GCC 5.4.0
问题是 html 中的覆盖率报告告诉析构函数中缺少分支,但析构函数为空。我不知道为什么。 任何人都可以帮助我吗? 我也尝试使用 GCC 4.8.0 但结果相同
【问题讨论】:
标签: c++ code-coverage lcov
我的工作环境
cygwin
lcov 1.13
GCC 5.4.0
问题是 html 中的覆盖率报告告诉析构函数中缺少分支,但析构函数为空。我不知道为什么。 任何人都可以帮助我吗? 我也尝试使用 GCC 4.8.0 但结果相同
【问题讨论】:
标签: c++ code-coverage lcov
我遇到了同样的问题,我找到了this on stackoverflow。 简短的回答是,有不同类型的析构函数,这取决于您是删除动态分配的对象,还是静态分配的对象被破坏。
所以要摆脱这个缺失的分支覆盖,你必须用
创建一个对象TestClass* a = new TestClass();
和
TestClass b;
然后确保它们都被销毁,当然,前者与
delete a;
那么这两种析构函数都应该被调用。
【讨论】:
一个简单的解决方案是将// GCOVR_EXCL_LINE 作为注释添加到您知道没有执行两个分支的行中。我认为这对于这种情况是一个好主意,因为据我了解,没有其他方法可以强制 GCOV 同时采用析构函数的动态和非动态分支。
例如:
TestClass *a = new TestClass;
delete a; // GCOVR_EXCL_LINE
将从覆盖报告中排除delete a; 行。
有关详细信息,请参阅以下内容: https://gcovr.com/en/master/guide.html#exclusion-markers
【讨论】: