Code Coverage是软件测试领域的话题,具有大概率Code Coverage的源程序相比于小概率Code Coverage的源程序更容易在测试集的测试下发现BUG,LLVM提供了一个工具LLVM-COV,简单记录一下使用方法:
step 1:安装clang 和 llvm
sudo apt install clang llvm
Step 2:编写测试程序:
// coverage.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int loop = atoi(argv[1]);
for(int idx = 0; idx < loop; idx++)
{
printf("%s line %d, %d\n", __func__, __LINE__, idx);
}
return 0;
}
Step3:编写Makefile
all:
clang -o loop-cov -fprofile-instr-generate -fcoverage-mapping coverage.c
选项-fprofile-instr-generate -fcoverage-mapping是为了对源码进行插桩编译,这样执行程序后,才会产生Code Coverage文件
Step4:执行程序,产生Code Coverage文件
产生了default.profraw文件
Step5:生成Code Coverage数据信息
all:
clang -o loop-cov -fprofile-instr-generate -fcoverage-mapping coverage.c
data:
llvm-profdata merge -o loop-cov.profdata default.profraw
llvm-cov show ./loop-cov -instr-profile=loop-cov.profdata loop-cov.profdata
执行 make data
得到了每条指令的执行次数信息,llvm-cov对原始代码进行进行插桩操作,在运行时获取程序每条代码的执行次数信息。