LLVM入门教学——Code Coverage插桩

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
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值