2

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

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

我得到了输出,覆​​盖率为 0%

扫描目录。对于 gcda/gcno 文件...
找到 2 个文件(并将处理 1 个)
运行 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'
解析文件 /opt/ 的覆盖率数据gcovr-3.2/doc/examples/src/example1.cpp
过滤文件的覆盖率数据 /opt/gcovr-3.2/doc/examples/src/example1.cpp
收集0个文件的覆盖率数据

为了进一步调试,我转到“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
文件 '../src/example1.cpp'
执行的行数:7 个执行的分支的 85.71%
:2 个分支的 100.00%
至少
执行一次:2 个调用的 50.00% :100.00% of 1
../src/example1.cpp:creating '..#src#example1.cpp.gcov'

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

4

3 回答 3

7

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

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

希望这个解决方案有帮助..

于 2017-04-24T10:57:58.930 回答
1

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

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

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

即使它不是规范的但路径应该是完整的也很好。

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

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

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

于 2017-02-25T14:18:04.353 回答
0

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

我不明白为什么没有/usr/local/bin/gcov创建它作为gcov-9为我解决它的链接。

于 2020-04-06T10:33:14.813 回答