【问题标题】:Why does gcovr generate empty coverage statistics?为什么 gcovr 会生成空的覆盖率统计信息?
【发布时间】:2020-07-03 17:06:38
【问题描述】:

我对如何使用gcov 感到困惑。我有一个 cmake 项目,它有两个使用 googletest 的测试可执行文件。我已在我的 cmake 脚本中添加了所需的标志:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -g -O0")

我已经重新编译了我的代码(使用 CLion 和 g++ 10.1)。

现在我切换到构建目录并手动运行两个测试套件。这个,根据docs应该会生成一些文件,可以用来生成覆盖率报告。现在我应该可以跑了

gcovr . 

从构建树的根目录(对吗?),但是输出是这样的:

(base) ciaran@DESKTOP-K0APGUV:/mnt/d/libOmexMeta/cmake-build-release-wsl-ubuntu1804-gcc101$ gcovr .
------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
------------------------------------------------------------------------------
TOTAL                                          0       0    --%
------------------------------------------------------------------------------

知道我做错了什么吗?

#编辑 也在运行

gcovr -r . --html --html-details -o example-html-details.html

有效,但生成一个空报告

【问题讨论】:

  • 你检查过所有的源文件实际上都被重新编译了吗?您可能需要make clean 或同等地址。
  • 是的,我删除了构建目录,重新编译然后运行gcovr,我仍然得到一个空的html doc。
  • 在这种情况下这不是问题,但是在调试 gcovr 不显示文件的原因时,在--verbose 模式下运行它会很有帮助。通常,问题在于 gcovr 对路径名感到困惑并认为您的源代码不是项目的一部分,或者它无法正确调用 gcov。另请注意,gcovr 尚未使用 GCC 10 进行测试(测试套件仍在 GCC 5 上运行……)
  • 我使用的是 gcov-10,我认为它已经用 gcc-10 进行了测试。仍在玩这个,但知道有一个详细模式很有帮助!
  • 是的,gcov-10 是 GCC 10 的一部分。但是 gcovr 是第三方项目

标签: c++ gcc code-coverage gcov gcovr


【解决方案1】:

你必须提供源文件:

-r , --root

源文件的根目录。默认为“.”,即当前目录。报告的文件名相对于此根目录。

如果您构建并用完源目录,它可能无法找到所需的内容。

【讨论】:

  • 几乎:gcovr 也必须从执行编译器的目录中调用。对于 cmake,这意味着正确的 gcovr 调用通常看起来像 cd build && gcovr --root ..
  • @amon 这就是我的建议,-r 参数必须具有源目录,而不是 . 如果构建在另一个目录中,正如他所说。
猜你喜欢
  • 2014-05-07
  • 2014-10-13
  • 2019-01-29
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 2011-05-14
  • 1970-01-01
相关资源
最近更新 更多