使用LLVM进行代码覆盖率检查

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文件

使用LLVM进行代码覆盖率检查

产生了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进行代码覆盖率检查

得到了每条指令的执行次数信息,llvm-cov对原始代码进行进行插桩操作,在运行时获取程序每条代码的执行次数信息。


结束!

上一篇:设计模式之桥接模式(四)


下一篇:内生性问题—工具变量法