llvm Coverage 可视化
Google 提供的工具
Google 提供了一个工具 https://cs.chromium.org/chromium/src/tools/code_coverage/coverage.py
1 |
|
一些参数的含义:
1 |
|
实际操作表明, coverage.py 不是太好用。 还是需要一步一步来,比较稳妥。
(0) 编译
在 chromium 项目下,可以直接使用 use_clang_coverage=true and is_component_build=false
如果不是 chromium 项目, 则需要自己 指定参数, 例如在 skia 项目中,可以这么写:
args.gn
1 |
|
如果是自己的项目,使用 clang 编译时加上这两个参数 -fprofile-instr-generate -fcoverage-mapping
(1) 生成 Raw Profiles 文件
export LLVM_PROFILE_FILE="out/report/target.%4m.profraw"
使用这个命令
限制 profraw 文件的个数。
%p 进程 ID
%h hostname
%Nm 生成几个 profraw 文件
写个循环,将所有的样本跑一遍。 timeout 10 指定程序超时时间。
1 |
|
将在 out/report 目录下, 生成 profraw 文件, 如果没有生成, 则说明上面的代码编译出了问题。
(2) 生成 Indexed Profile
/home/henices/clang7/bin/llvm-profdata merge -j=1 -sparse -o out/report/coverage.profdata out/report/*.profraw
-sparse 能大幅减小 profraw 文件大小
(3) 生成 Coverage report
1 |
|
打开 out/report/index.html 可以看到详细的 html 报告,非常不错。
参考链接
llvm Coverage 可视化
https://usmacd.com/cn/llvm_coverage/