0

我正在尝试使用 .bat 文件为项目生成覆盖率报告,如下所述。

  1. 我看到很少的 .gcov 文件。此外,当我单击生成的 html 输出上的链接时,我无法查看文件详细信息(找不到文件错误)。我如何解决它?
  2. 执行 .bat 文件后,我看到类似“解析 QString.h 的覆盖率数据”(QT 库文件)之类的输出。是预期的吗?

我看过很多相关的问题,但我无法弄清楚

(in report_coverage.bat)
    set GCovrpath= C:\python37\script\lib\
    set GCovpath= C:\abc\ghj\bin\
    set datafiles= C:\source\mywork\root\testing\unittests\rose\build\debug\
    set gcovr_src= C:\source\mywork\root\

    %GCovpath%gcov.exe  %datafiles% >> output.log 
     gcovr %datafiles% -s -p --html --html-details --gcov-executable %GCovpath%gcov.exe -o Test.html –verbose

以下是详细信息……

使用编译和执行代码

QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage

QMAKE_LFLAGS += --coverage .GCNO 和 .GCDA 文件按预期生成

看起来很简单的目录结构

 Root
     Header
           Rose
           Marigold
           Jasmin   
     Source
           Rose
           Marigold
           Jasmin   
     Testing
           UnitTests
               Rose
                  build
                       debug
               Marigold
                  build
                       debug
               Jasmin   
                  build
                       debug

谢谢你。

更新: 见下面的答案

4

2 回答 2

0

如果您自己调用 gcov,则需要从执行编译器的同一目录中运行它,并且需要为其提供 gcno、gcda 或源文件的路径。Gcov 一次只能处理一个输入文件。

当 gcov 在正确的位置运行时,它可以查看编译元数据以找到正确的源文件。如果有关于丢失源文件的错误,则表明您没有使用正确的目录。

Gcovr 自动运行 gcov,并具有启发式方法来找出正确的目录。但是,您仍然应该从开始编译的目录(通常是构建目录)运行它。

如果不属于您的项目,gcovr 将排除覆盖数据。如果您有单独的构建目录,则需要将--root参数设置为包含源代码的目录。Gcov 处理所有已编译文件的覆盖率数据,这使得 gcovr 的后处理成为必要。

在详细模式下,gcovr 将在打开 gcov 报告时输出“Parsing coverage data for <file>”。然后它将使用文件中的数据来决定它是否属于您的项目,如果源代码是您项目的一部分,则输出“过滤覆盖率数据”,否则输出“排除覆盖率数据”。

覆盖率报告可能不完整的原因有多种:

  • 过滤有问题。
  • 当多个文件具有相同的名称时,Gcovr 的启发式可能会混淆,例如util.h在不同目录中调用的两个文件。
  • Gcovr 的 --html-details 报告由多个 .html 文件组成,因此请确保它们都可用。

在您的 BAT 文件中,此调用可能会更好:

gcovr --root ../src --print-summary --sort-percentage --html-details --gcov-executable %GCovpath%gcov.exe --output Test.html --verbose

假设以下目录结构,并且您从内部运行 gcovr build/

your-project/
  src/
    Header/
      ...
    Source/
      ...
    Testing/
      ...
  build/
    ...

如果根路径存在问题../src,请考虑使用绝对路径,例如C:/path/to/the/src.

于 2019-09-28T15:53:55.893 回答
0

对于 Windows,我不能强调足够的“\”。

从调试文件夹运行此命令(因为 test.exe 在这里)

gcov -b -l -s C:\source\mywork\root\ debug\*.gcno

从 Unit tests 文件夹运行此命令(这将排除 .h 文件和包含test的文件)

gcovr -g -k -v  --root C:\source\mywork\root\ -e ".*\.h"    -e ".*test[_-|A-Z|a-z|0-9]*\.cpp"   --html --html-details -o report.html
于 2019-10-01T22:50:36.340 回答