http://releases.llvm.org/7.0.0/tools/clang/docs/SourceBasedCodeCoverage.html

  1. 编译时打开 coverage 选项

传递 -fprofile-instr-generate -fconverage-mapping

$ clang++ -fprofile-instr-generate -fcoverage-mapping foo.cc -o foo

  1. 运行你的程序

运行你的程序。程序会写入一个 raw profile 文件到环境变量 LLVM_PROFILE_FILE 制定的路径。
如果环境变量不存在,profile 默认写到 default.profraw ,与当前程序同一个目录。
如果 LLVM_PROFILE_FILE 包含不存在的目录,缺失的目录结构会被创建。
有一些模式字符串(pattern strings)会被重写:
%p -> 进程ID
%h -> hostname
%Nm -> 指令二进制签名

$ LLVM_PROFILE_FILE="foo.profraw" ./foo

  1. 创建 coverage 报告

raw profiles 在被用作生成报告前应该被重新索引。
使用 llvm-profdata 工具。

$ llvm-profdata merge -sparse foo.profraw -o foo.profdata

有很多种方法渲染 coverage 报告。最简单的选项是生成面向行的报告

$ llvm-cov show ./foo -instr-profile=foo.profdata

html 报告指定 format 即可

$ llvm-cov show ./foo -instr-profile=foo.profdata -format=html > report.html

生成文件级别 coverage 统计信息概览使用这个

$ llvm-cov report ./foo -instr-profile=foo.profdata

Last modification:June 1st, 2020 at 01:17 am
 Support
如果觉得我的文章对你有用,请随意赞赏