0

我想用 gcovr(或 gcov/lcov)分析的程序与编译程序的构建目录一起位于共享文件系统上,并且我有多个工作人员打算并行测试我的程序。为了解决竞争条件问题(工作人员将全部运行我的程序,因此在共享文件系统的同一位置生成名称相同的 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描述。我希望这会查找程序源、.o 文件和gcda 文件。但是,我运行它,我看到 gcovr 正在以这种形式从根目录运行 gcov 命令:/absolute/path/to/root/absolute/path/to/object/dir/absolute/path/to/gcda/dir-v

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 构建的)。有谁知道它为什么会这样?(这是它应该运行的方式吗?)我怎样才能让它按照我想要的方式运行?提前致谢!

4

1 回答 1

2

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

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 没有直接关系
于 2018-07-25T07:52:15.797 回答