【问题标题】:Gcov works, but Gcovr doesn't workGcov 工作,但 Gcovr 不工作
【发布时间】:2018-09-05 12:09:33
【问题描述】:

当我运行 gcov 时,输出显示 87% 已覆盖...然后我想使用 gcovr,但它永远不会工作。我尝试从许多目录运行,有很多选项。在某些情况下,我得到了一些文件,但不是我想要查看的文件。

我的项目包含 3 个文件:

  • src\main.c
  • src\makefile
  • tst\test1.c
  • tst\test2.c
  • tst\makefile
  • tst\obj\all 目标文件、gcno、gcda 都存放在这里...
  • build\build.bat 制作项目(windows)

我应该更改目录结构吗?如何查看我应该使用哪个版本的 gcov? 我想查看 main.c 的覆盖率,但只获得 test1.c 和 test2.c 的覆盖率,而这些与覆盖率无关!!

在测试文件旁边,我在 C:\compiler 上包含了覆盖范围不需要的目录。

我试过 Python27:

python c:\python27\scripts\gcovr -g --object-directory=. -r ..\..\..\ --html --html-details -o program.html -v

我试过 Python36:

c:\python36\scripts\gcovr --use-gcov-files -v --object-dir=.

但永远不会覆盖我的被测设备。只有不带 gcovr 的 gcov 有效,所以文件必须正确。

【问题讨论】:

  • (1) 能否添加您正在使用的 gcovr 版本和 GCC/gcov 版本? (2) 您从哪些目录运行 gcovr?
  • 您能否解释一下为什么需要使用 -g/--use-gcov-files 标志?该选项假定您之前已为您感兴趣的所有源文件运行 gcov。您能说明您是如何调用 gcov 的吗?
  • gcov 易于使用,但输出对 Jenkins 没有用处。我没有尝试使其兼容,而是调试了 gcovr。我在github.com/barthoukes/gcovr 分叉了主项目并为 Windows 进行了更改,它们适用于 WIndows 10 中的 C 和 C++。对于 Linux,它已经可以正常工作了。只需获取 1 个文件,gcovr。它实际上是一个python脚本,易于调试。

标签: c gcov gcovr


【解决方案1】:

我在 Windows 中运行 GCOVR 时发现了几个问题,尤其是关于 \ 而不是 / 和使用冒号字符 : 在名称中,如 C:\file.c

当您使用 \ 时,它需要使用其中的 2 个通过减去 2 个路径来创建文件。但它找不到这个,例如 \a\b\c\d 它不会在 \a\b\c\d 中找到。所以,看看:[github.com/barthhoukes/gcovr][1]

该解决方案仍然很脏,但它适用于我在 Windows 中的项目。我认为 gcovr 的人也在讨论这个问题。

你只需要文件:gcovr

【讨论】:

  • 我试图查看您的 gcovr 分叉,但找不到您的更改 - 您是否可以 git push 他们让它们公开可见?顺便说一句,我是 gcovr 的维护者之一,所以我对您提出的解决方案非常感兴趣。
【解决方案2】:

尝试添加 -f '' 选项。当我们从树中构建时,gcovr 中存在错误

【讨论】:

  • 已经通过禁用 gcovr 本身的某些行来发现问题。实际上,该脚本非常小,因此很容易调试。实际上 \ 被复制并更改为 \\,所以我发现 c:\dir\source\ 更改为 C\\:\\\\dir\\source\\ 这将永远不会再与 c:\dir 比较\source 然后过滤掉所有文件。在 Linux 中不存在这个问题,因此 gcovr 需要做更多工作才能使 windows 兼容,
  • @BartMensfort 如果您可以回答我对您的问题的评论,我相信可能有一个解决方案,而不必在 gcovr 代码中乱搞——您从哪些目录运行 gcovr? Windows 上的过滤是known to have problems。如果您帮助我理解您的问题,这将帮助我develop a more sensible approach to filtering
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2018-12-19
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多