如果 cpp、gcno 和 gcda 文件不在同一文件夹中,GCovr 会生成 0% 的覆盖率报告

GCovr generate a 0% coverage report, if cpp,gcno and gcda files are not present at same folder

我在同一个文件夹中有两个文件夹,如下所示:-
1.src(它包含我的 cpp 文件)
2.linux(我正在 运行ning g++ 并执行 o 文件)
现在我运行宁命令如下

cd linux
g++ --coverage ../src/example1.cpp -o example1
./example1
cd ..
/opt/gcovr-3.2//scripts/gcovr -v -r .

我的输出为,覆盖率为 0%

Scanning directory . for gcda/gcno files...
Found 2 files (and will process 1)
Running gcov: 'gcov /opt/gcovr-3.2/doc/examples/example1/linux/example1.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /opt/gcovr-3.2/doc/examples/example1/linux' in '/opt/gcovr-3.2/doc/examples/example1/linux'
Parsing coverage data for file /opt/gcovr-3.2/doc/examples/src/example1.cpp
Filtering coverage data for file /opt/gcovr-3.2/doc/examples/src/example1.cpp
Gathered coveraged data for 0 files

为了进一步调试,我在命令

下转到 'linux' 文件夹作为 运行
gcov /opt/gcovr-3.2/doc/examples/example1/linux/example1.gcno --branch-counts --branch-probabilities --preserve-paths --object-directory /opt/gcovr-3.2/doc/examples/example1/linux

我得到的输出是有效覆盖率

/opt/gcovr-3.2/doc/examples/example1/linux
File '../src/example1.cpp'
Lines executed:85.71% of 7
Branches executed:100.00% of 2
Taken at least once:50.00% of 2
Calls executed:100.00% of 1
../src/example1.cpp:creating '..#src#example1.cpp.gcov'

现在我想知道我做错了什么?我的项目很复杂,所以我不想将所有 cpp 文件从各自的 'src' 文件夹复制到各自的 'linux' 文件夹。我试过 --object-directory 然后也是同样的结果。

几个月以来我一直在使用 gcovr 和 gcov。

唯一与我所做的不同的是您没有在“-r”标志中正确指定路径。

您应该始终指定完整路径。

即使不规范也没关系,但路径应该是完整的。

并且始终在根目录名称后分别为 linux 和 windows 指定一个额外的斜杠“/”或“\”。 例如

-r "/path/to/root/directory/"

看来这个额外的斜杠很重要,否则会出问题。 不知道确切的问题,但我认为它不会在没有结束斜杠的情况下进行递归搜索。

gcovr 使用 .gcov 文件进行分析。 我也遇到了类似的问题,并通过手动生成 .gcov 文件分两步克服了它

  1. 在包含 gcno 文件的文件夹中 运行 gcov -b -l -p -c *.gcno 这将生成包含来自 gcno 和 gcda 文件的所有详细信息的 gcov 文件。
  2. 转到项目根文件夹和 运行 gcovr -g -k -r . --html --html-details -o tp.html 或任何带有 -g 选项的 gcovr 命令,-g 选项告诉 gcovr 处理 gcov 输出文件

希望此解决方案对您有所帮助..

Om MacOS/Darwin 安装了 Homebrew gcc/gcovr,原来 gcovr 使用的 gcov/usr/bin/gcov 即 Apple/clang 不兼容的版本。

我不明白为什么没有 /usr/local/bin/gcov 但将其创建为 link 到 gcov-9 为我解决了这个问题。