gcc 中参数-ftest-coverage -fprofile-arcs 使用

利用gcov检测覆盖率

例子:

#include <stdio.h>




int _abs(int a)
{
if (a < 0) {
a = 0-a;
}
return a;
}


int _max(int a, int b)
{
int max = a;
if (a < b) {
max = b;
}
return max;
}


void sort( int list[], int size)
{
int i, j, temp, swap = 1;
while (swap) {
swap = 0;
for ( i = (size-1) ; i >= 0 ; i-- ) {
for ( j = 1 ; j <= i ; j++ ) {
if ( list[j-1] > list[j] ) {
temp = list[j-1];
list[j-1] = list[j];
list[j] = temp;
swap = 1;
}
}
}
}
}


int main() 
{
int x = 4;
int a = 15,b = 20;


int theList[10]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int i;
sort( theList, 10 );

for (i = 0 ; i < 10 ; i++) { 
printf("%d\n", theList[i]);
}


printf("Hello Ubuntu!!\n");



printf("abs(%d) is %d\n",x,_abs(x));
printf("max(%d,%d) is %d\n",a,b,_max(a,b));


return 0;
}


编译

gcc -fprofile-arcs -ftest-coverage Hello.c


运行:

./a

1
2
3
4
5
6
7
8
9
10
Hello Ubuntu!!
abs(4) is 4
max(15,20) is 20


$ gcov -b Hello.c

File 'Hello.c'
Lines executed:96.88% of 32
Branches executed:100.00% of 14
Taken at least once:85.71% of 14
Calls executed:100.00% of 7
Creating 'Hello.c.gcov'


$ gcov  Hello.c

File 'Hello.c'
Lines executed:96.88% of 32
Creating 'Hello.c.gcov'


以上是执行的效果,自己作为以后查看备份在这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
覆盖率(Coverage)是一种衡量测试用例对代码执行的覆盖程度的指标。它通常用于衡量代码有多少行、分支或语句被测试到。 在软件开发,覆盖率可以通过使用工具来生成代码覆盖率报告。对于C语言,使用mapfile可以生成代码的覆盖率报告。 mapfile是GNU的一个工具,主要用于以二进制格式保存程序的内存映射信息,包括代码段、数据段、符号表等。它可以将程序执行时的内存映射信息记录下来,然后根据这些信息生成代码覆盖率报告。 使用mapfile进行代码覆盖率测试的步骤通常包括以下几个方面: 1. 编译代码时需要添加覆盖率测试选项,例如使用gcc编译时可以添加"-fprofile-arcs -ftest-coverage"选项。 2. 运行测试用例,确保测试用例能够执行到代码的各个分支和语句。 3. 使用mapfile工具对程序进行运行,收集程序执行时的内存映射信息。可以通过以下命令运行程序并生成内存映射文件: ``` mapfile -o coverage.map ./your_program ``` 4. 使用gcov工具将内存映射文件转换为代码覆盖率报告。可以使用以下命令生成报告: ``` gcov your_program.c ``` 这将生成一个以`.gcov`为后缀的文件,其包含了代码的覆盖率信息。 通过分析代码覆盖率报告,开发人员可以了解到测试用例对代码的覆盖情况,帮助他们发现代码可能存在的漏洞或未覆盖的部分。这有助于提高代码质量和可靠性,同时也可以指导测试用例的编写和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值