1、简介
- LLVM的Code Coverage工具集提供了一系列工具和库,帮助开发者收集和分析代码覆盖率数据,从而评估测试的有效性和代码的执行情况。
- LLVM的Code Coverage工具集包括以下主要组件:
- Clang编译器:用于编译源代码并生成覆盖率信息。
- LLVM覆盖率工具:如llvm-profdata和llvm-cov,用于处理和报告覆盖率数据。
2、使用
- 安装Clang和LLVM工具链。
-
sudo apt-get install clang llvm
-
- 准备一个test.c文件,计算该程序运行时的覆盖率。
-
#include <stdio.h> int main(int argc, char *argv[]) { int a, b; char op; int result; scanf("%d%c%d", &a, &op, &b); switch (op) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; default: return 1; } printf("%d\n", result); return 0; }
-
- 编译带插桩的代码。
-
clang -fprofile-instr-generate -fcoverage-mapping test.c -o test
-
- 运行编译后的程序以生成覆盖率数据文件。
-
LLVM_PROFILE_FILE="test.profraw" ./test
- 使用环境变量LLVM_PROFILE_FILE指定输出的覆盖率数据文件名为test.profraw。
-
- 合并生成的覆盖率数据文件。
-
llvm-profdata merge -sparse test.profraw -o test.profdata
-
- 生成并查看执行情况。
-
llvm-cov show ./test -instr-profile=test.profdata
- 【注】红色的代表没有执行的代码。
-
- 查看覆盖率报告。
-
llvm-cov report ./test -instr-profile=test.profdata
- Regions:代码区域的总数。
- Missed Regions:未覆盖的代码区域数量。
- Cover:代码区域的覆盖百分比。
- Functions:函数的总数。
- Missed Functions:未覆盖的函数数量。
- Executed:函数的覆盖百分比。
- Lines:代码行的总数。
- Missed Lines:未覆盖的代码行数量。
- Cover:代码行的覆盖百分比。
- Branches:分支的总数
- Missed Branches:未覆盖的分支数量。
- Cover:分支的覆盖百分比。
-
3、执行多次的代码覆盖率
- 第一次运行:
-
LLVM_PROFILE_FILE="test1.profraw" ./test
-
- 第二次运行:
-
LLVM_PROFILE_FILE="test2.profraw" ./test
-
- 合并生成的覆盖率数据文件。
-
lvm-profdata merge -sparse test1.profraw test2.profraw -o test.profdata
-
- 生成并查看执行情况。
-
llvm-cov show ./test -instr-profile=test.profdata
-
- 查看覆盖率报告。
-
llvm-cov report ./test -instr-profile=test.profdata
-