我想用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构建的)。有谁知道为什么它会这样? (这是应该运行的方式吗?)如何使它表现出所需的行为?预先感谢!
答案 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文件。
其他说明: