尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

分支覆盖率 80% 意味着什么:从插桩原理到 gcov / llvm-cov 数据流

分支覆盖率 80% 意味着什么:从插桩原理到 gcov / llvm-cov 数据流 分支覆盖率 80% 意味着什么:从插桩原理到 gcov / llvm-cov 数据流一、一个只有 3 行逻辑的函数// clamp.cppstaticintclamp(intv,intlo,inthi){if(vlo)returnlo;// 分支 A:真 / 假if(vhi)returnhi;// 分支 B:真 / 假returnv;}intmain(){// 只走"落在范围内"这一条路径returnclamp(5,0,10);}我们只用一个测试用例clamp(5, 0, 10)——它落在区间内,两个if都判断为假。跑覆盖率,两条工具链的结果如下。gcov(GCC / Linux CI 常用)clang++-O0--coverageclamp.cpp-ogcovtest ./gcovtest gcov-bgcovtest-clamp.gcdaFile 'clamp.cpp' Lines executed:100.00% of 7 Branches executed:100.00% of 4 Taken at least once:50.00% of 4 ← 这就是"分支覆盖率" No calls带分支标注的源码:1: 5: if (v lo) return lo; branch 0 taken 0% ← 从没走过 branch 1 taken 100% 1: 6: if (v hi) return hi; branch 0 taken 0% ← 从没走过 branch 1 taken 100%llvm-cov(Clang / macOS)clang++-O0-fprofile-instr-generate -fcoverage-mapping clamp.cpp-oclampLLVM_PROFILE_FILE="clamp.profraw"./clamp xcrun llvm-profdata merge-sparseclamp.profraw-oclamp.profdata xcrun llvm-cov report ./clamp -instr-profile=clamp.profdataRegions Missed Cover Functions Executed Lines Missed Cover Branches Missed Cover 8 2 75.00% 2 100.00% 8 0 100.00% 4 2 50.00%两条链路得出同一个结论:指标结果函数覆盖100%行覆盖100%基本块 / Region66% ~ 75%分支覆盖50%行覆盖 100%,分支覆盖只
返回列表