c-Gcovr--对象目录选项无法按预期使用与.o文件不同的目录中的.gcda文件



我想用gcovr(或gcov/lcov(评测的程序位于共享文件系统上,以及编译该程序的构建目录,我有多个工作程序,我打算用它们并行测试我的程序。为了解决竞争条件问题(worker将all运行我的程序,因此all在共享文件系统的同一位置生成名称相同的gcda文件(,我将gcda文件重定向到每个worker上的一个单独的目标目录(如这里所述(,并且我一直在运行以下命令:

gcovr -v -r /absolute/path/to/root --html --html-details -o test-details.html --object-directory=/absolute/path/to/object/dir /absolute/path/to/gcda/dir

其中最后一个路径是这里描述的search_paths。我希望它在/absolute/path/to/root中查找程序源,在/absolute/path/to/object/dir中查找.o文件,在/absolute/path/to/gcda/dir中查找gcda文件。然而,我用-v运行了它,我看到gcovr正在从根目录以这种形式运行gcov命令

gcov /absolute/path/to/gcda/dir/file.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /absolute/path/to/gcda/dir

同样,我希望它以以下形式运行(查看--object目录路径(:

gcov /absolute/path/to/gcda/dir/file.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /absolute/path/to/object/dir

它在像后一个命令一样运行时表现正常,但gcovr运行的是前者。我只使用gcovr而不是gcov,因为我有一个大项目(我知道gcovr是基于lcov构建的(。有人知道它为什么会这样吗?(这是它应该运行的方式吗?(我如何才能让它按照我想要的方式运行?提前感谢!

这是在GitHub上交叉发布到gcovr问题跟踪器的,下面是摘要:

Gcovr目前期望.gcda和.gcno文件紧挨着(通常是这样(。搜索路径会影响gcovr搜索这些文件的位置。--object目录只为搜索路径提供了一个默认值,但在这里您已经用显式搜索路径覆盖了它。gcovr--object directory选项不会传递到gcov--object目录选项。

截至gcovr 4.1,没有解决此问题的选项。您必须将.gcno文件从构建目录复制到每个包含覆盖率数据的目录中。或者,您可以手动运行gcov,然后使用gcovr -g ...聚合.gcov文件。

附加说明:

  • gcov对.o对象文件不感兴趣,只对.gcda文件(在测试执行期间编写(和.gcno文件(在编译期间编写(感兴趣
  • gcovr和lcov没有直接关系

最新更新