使用gcov进行手动插桩获取覆盖率数据
时间: 2024-01-10 09:02:50 浏览: 163
使用gcov进行手动插桩获取覆盖率数据的步骤如下:
1. 编译时加入-g -fprofile-arcs -ftest-coverage选项,例如:
```
gcc -g -fprofile-arcs -ftest-coverage hello.c -o hello
```
2. 运行程序,执行测试用例,例如:
```
./hello
```
3. 使用gcov生成覆盖率数据,例如:
```
gcov hello.c
```
此时,会生成一个hello.c.gcov文件,包含了每个代码块的执行情况和覆盖率数据。
4. 分析覆盖率数据报告,例如:
```
cat hello.c.gcov
```
输出结果类似于:
```
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
function main called 1 returned 100% blocks executed 100%
1: 3:int main()
-: 4:{
-: 5: int i;
1: 6: for (i = 0; i < 10; i++) {
1: 7: if (i % 2 == 0) {
branch 0 taken 0%
branch 1 taken 100% (fallthrough)
-: 8: printf("%d is even\n", i);
-: 9: } else {
branch 2 taken 100% (fallthrough)
branch 3 taken 0%
1: 10: printf("%d is odd\n", i);
-: 11: }
1: 12: }
1: 13: return 0;
-: 14:}
```
其中,每个代码行前面的符号表示其执行情况,"-:"表示该行未执行,"#####"表示该行被执行,数字表示执行次数。对于分支语句,会显示每个分支的执行情况和覆盖率数据。从覆盖率数据可以分析出代码的质量和测试用例的覆盖情况,有助于优化代码和测试用例。
阅读全文