gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:47:13 24 4
gpt4 key购买 nike

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

最佳答案

这是 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,然后使用 gcovr -g ... 聚合 .gcov 文件。

附加说明:

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

关于c - Gcovr --object-directory 选项无法按预期使用与 .o 文件不同的目录中的 .gcda 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51503170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com