Gcovr --object-directory选项在与.o文件不同的目录中的.gcda文件无法正常工作

时间:2018-07-24 16:06:56

标签: c code-coverage gcov gcovr

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

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

其中最后一条路径为here,描述为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-directory路径):

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构建的)。有谁知道为什么它会这样? (这是应该运行的方式吗?)如何使它表现出所需的行为?预先感谢!

1 个答案:

答案 0 :(得分:1)

这是cross-posted to the gcovr issue tracker on GitHub,下面是摘要:

Gcovr当前期望.gcda和.gcno文件彼此相邻(通常是这种情况)。搜索路径影响gcovr在何处搜索这些文件。 --object-directory仅提供搜索路径的默认值,但是在这里您已使用显式搜索路径覆盖了该默认值。 gcovr --object-directory选项不会传递到gcov --object-directory选项。

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

其他说明:

  • gcov对.o目标文件不感兴趣,仅对.gcda文件(在测试执行过程中编写)和.gcno文件(在编译过程中编写)不感兴趣。
  • gcovr和lcov没有直接关系
相关问题