繁体   English   中英

多进程覆盖率报告

[英]Multi-process coverage reports

我正在尝试监视我的C ++项目的代码覆盖率。 如我在上一个问题中所述,我需要使用协程和其他高级C ++ 2a功能,因此我正在使用clang++进行编译。 我在这里发现, 使用clang++编译时(显然,还有-O0-g ),可以使用-coverage标志。

与可执行文件一起,这将生成一个.gcno文件,其中包含可执行文件的映射。 运行可执行文件后,将生成一个附加的.gcda文件,其中包含实际的分析数据。

我注意到,如果我多次运行可执行文件,那么coverage输出会很好地并正确地合并到.gcda文件中,这非常好。

现在,我想知道同时运行可执行文件的多个实例是否安全。

之前有人建议运行测试顺序: 依次运行这些,但我的应用程序使用了大量的联网,以及一些测试需要多个实例一起通信(我用的码头工人来模拟网络,并netem拿到样-现实的链接方案)。

将同一可执行文件的多个实例一起运行会不会引起任何问题? 我可以想象,如果实现了任何锁定机制,覆盖范围数据将被安全且原子地写入.gcda文件,并且如果其他可执行文件需要执行转储,它们将等待直到释放锁定为止。 但是,我在任何地方都找不到这种情况确实发生的保证。

自Clang 7起,GCOV分析应该是多进程安全的。

在Clang 6中,有两个错误阻止了它的正常运行: https : //bugs.llvm.org/show_bug.cgi?id =34923https://bugs.llvm.org/show_bug.cgi?id=35464 ,但是它们现在已修复。

实际上,我们目前正在使用它来收集Firefox(多进程)的覆盖率数据。 Firefox本身都有多个进程,我们还并行运行测试(针对某些特定的测试套件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM