Gcovr --object-directory 选项与 .o 文件不同的目录中的 .gcda 文件无法按预期工作

Gcovr --object-directory option not working as expected with .gcda files in a different directory than .o files

我想用 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

其中最后一个路径是 search_paths,描述为 here。我希望它在 /absolute/path/to/root 中查找程序源,在 /absolute/path/to/object/dir 中查找 .o 文件,在 /absolute/path/to/gcda/dir 中查找 gcda 文件。但是,我 运行 它与 -v 并且我看到 gcovr 是 运行ning 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 构建的)。有谁知道为什么它会这样? (这是它应该 运行 的方式吗?)我怎样才能让它按照我想要的方式运行?提前致谢!

这是 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 文件复制到包含覆盖率数据的每个目录中。或者,您可以手动 运行 gcov,然后将 .gcov 文件与 gcovr -g ....

聚合

补充说明:

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