ald*_*nor 6 c++ code-coverage clang gcov lcov
我正在尝试使用 lcov(v1.13,在 OS X 上,使用 clang 作为编译器)为我的测试套件生成代码覆盖率,但我遇到了一个恼人的问题,我不知道如何解决。SO 上有几个类似的问题,但我找不到这个问题的解决方案。由于某种原因,函数/成员声明被标记为可访问但未执行,类似于下面的示例(这是标头中的内联方法定义):
这使得行覆盖率指标毫无用处,因此我希望有一种方法可以修复它,而无需将每个声明标记为 LCOV_EXCL_LINE。
使用的编译器标志非常标准:
-g -O0 -fno-inline -ftest-coverage -fprofile-arcs -fno-elide-constructors
Run Code Online (Sandbox Code Playgroud)
奇怪的是,源文件中的方法定义也标记为红色,尽管主体不是,例如:
// header.h
class Foo {
void bar(); // ignored, marked as unreachable
}
// header.cpp
void Foo::bar() { // marked as red (reachable / not executed)
do_something(); // marked as covered
}
Run Code Online (Sandbox Code Playgroud)
如果有任何重要性的话,源文件是静态库的一部分,该静态库静态链接到 CMake 中的测试工具。
回答我自己的问题:
显然,lcov -i(初始捕获)假设函数的起始行已被检测,而对于 LLVM,它们实际上没有(而对于 GCC,它们是)。有一个上游 GitHub 问题 ( linux-test-project/lcov#30 ) 更详细地记录了这一点。
在上游修复此问题之前lcov,我发布了一个简单的解决方法- 一个 Python 脚本,该脚本从基本覆盖文件中删除函数起始行,这应该“修复”它,至少是暂时的。
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |