c++ - 如何让lcov执行得更快?

标签 c++ gcc gcov lcov

我遇到了 lcov 的性能问题。

我正在七个不同的配置文件中执行一个程序,收集每个配置文件的覆盖率,然后将覆盖率配置文件与 lcov 合并:

lcov --rc lcov_branch_coverage=1 -a coverage_1.dat -a coverage_2.dat -a coverage_3.dat -a coverage_4.dat -a coverage_5.dat -a coverage_6.dat -a coverage_7.dat -o coverage_full.dat

但是,这速度非常慢。合并 7 个配置文件大约需要 10 分钟,这实际上比编译和运行 7 个配置文件所需的时间要长。每个dat文件大约有1M行。

lcov --combinelcov --remove 步骤也非常慢。每人大约 45 秒。

有什么方法可以加快这个合并步骤吗?如有必要,我可以使用多个线程,并且我有足够的内存。如果有其他工具能够正确执行此组合,我也会感兴趣(我尝试将文件转换为 Cobertura 并与我找到的 Python 脚本进行合并,但它崩溃了)。

如果有完全替代 lcov 的方法,我也很感兴趣。我一直在使用 gcovr,但是有了它,我必须使用其他几个工具来进行组合,它不是最佳的,但它要快得多。

最佳答案

If there is an alternative to lcov completely, I'm also interested.

尝试 fastcov - 它将并行使用所有可用的内核(它可以以 lcov 信息格式输出报告):

https://github.com/RPGillespie6/fastcov

它还可以合并文件。注意:您需要 GCC 9+

关于c++ - 如何让lcov执行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211721/

相关文章:

performance - 为什么 32 字节的循环对齐会使代码更快?

c++ - 转换 Classname::FunctionName( Para1, Para2 ) 中的符号

gcov - 为什么在运行 gcov 时会收到 "has arcs from exit block"消息?

c++ - 素数序列的回溯算法

c - Solaris 32 位 - 使用 gcc 构建共享对象

c++ - 查询性能计数器状态?

conditional - Gcov 报告普通函数调用的分支

c++ - 解释 gcov 输出以提高覆盖率的技巧是什么?

c++ - 如何删除句子中的所有标点符号?

c++ - 使用 GCC 程序集向左/向右旋转移动次数