多进程覆盖率报告 我试图监视我的C++项目的代码覆盖率。正如我在前一个问题中所说的,我需要使用协同程序和其他高级C++2a特性,所以我使用clang++来编译它。我发现在使用clang++编译时可以使用-coverage标志(显然,还有-O0和-g)
与可执行文件一起,这将生成一个多进程覆盖率报告 我试图监视我的C++项目的代码覆盖率。正如我在前一个问题中所说的,我需要使用协同程序和其他高级C++2a特性,所以我使用clang++来编译它。我发现在使用clang++编译时可以使用-coverage标志(显然,还有-O0和-g),c++,code-coverage,clang++,llvm-cov,C++,Code Coverage,Clang++,Llvm Cov,与可执行文件一起,这将生成一个.gcno文件,其中包含可执行文件的映射。运行可执行文件时,将生成一个附加的.gcda文件,其中包含实际的分析数据 我注意到,如果我多次运行可执行文件,覆盖率输出会很好地正确地合并到.gcda文件中,这非常好 现在,我想知道同时运行可执行文件的多个实例是否安全 在任何人建议按顺序运行测试之前:我按顺序运行它们,但我的应用程序使用了大量网络,并且一些测试需要多个实例来一起通信(我使用Docker模拟网络,使用netem获得某种真实的链接场景) 同时运行同一可执行文件的
.gcno
文件,其中包含可执行文件的映射。运行可执行文件时,将生成一个附加的.gcda
文件,其中包含实际的分析数据
我注意到,如果我多次运行可执行文件,覆盖率输出会很好地正确地合并到.gcda
文件中,这非常好
现在,我想知道同时运行可执行文件的多个实例是否安全
在任何人建议按顺序运行测试之前:我按顺序运行它们,但我的应用程序使用了大量网络,并且一些测试需要多个实例来一起通信(我使用Docker模拟网络,使用netem获得某种真实的链接场景)
同时运行同一可执行文件的多个实例会导致任何问题吗?我可以想象,如果实现了任何锁定机制,覆盖率数据将安全地、自动地写入
.gcda
文件,如果其他可执行文件需要执行转储,它们将等待锁释放。然而,我找不到任何地方可以保证这种情况确实发生。自Clang 7以来,GCOV评测应该是多进程安全的
在Clang6中有两个bug阻止了它的工作,并且,但是它们现在已经被修复了
事实上,我们目前正在使用它来收集Firefox的覆盖率数据,这是一个多进程的过程。我们在Firefox中都有多个进程,我们还并行运行测试(针对某些特定的测试套件)