对于仅标头库,我具有以下结构
include
- header1.h
- header2.h
- header3.h
test
- test1.cpp
现在test1.cpp
只使用. header1.h
_ _ _ _
我还想显示 0% 的覆盖率,因为它代表了测试覆盖的代码的更准确表示。test1.cpp
--coverage
gcovr
-r ../include
header1.h
header2.h
header3.h
对于仅标头库,我具有以下结构
include
- header1.h
- header2.h
- header3.h
test
- test1.cpp
现在test1.cpp
只使用. header1.h
_ _ _ _
我还想显示 0% 的覆盖率,因为它代表了测试覆盖的代码的更准确表示。test1.cpp
--coverage
gcovr
-r ../include
header1.h
header2.h
header3.h
覆盖数据是按编译单元收集的。在您的示例中,您有一个test1.cpp
文件的编译单元。编译器将生成一个 .gcno 文件,该文件允许其他工具将覆盖率数据与此编译单元中文件中的行相关联。但是由于只header1.h
包含了,所以.gcno 文件中不会有任何关于header2 和header3 的信息。
gcov 和 gcovr 等覆盖工具与语言无关,并且不会在您的目录中搜索可能包含未发现源代码的文件。如果您希望覆盖率报告了解这些文件,则必须将该文件包含在您编译时使用的编译单元中--coverage
。即使这样,您也会注意到 GCC 会忽略未调用的内联函数。您只能在为该代码生成机器代码时获取覆盖率数据。
这是 gcov 覆盖机制的一个基本限制,意味着在解释头文件的覆盖率指标时必须小心。不要误认为高覆盖率意味着所有可以被覆盖的东西也都被覆盖了——这仅仅意味着为该文件中的代码生成的机器代码被彻底执行了。