C/C++代码覆盖率生成

初始状态下只有一个源代码文件

[email protected]:testCov> ls
test.c
[email protected]:testCov>

第一步:编译、链接、执行可执行文件

gcc -o a -coverage test.c -lgcov && ./a

这时会生成所需的记录文件(*.gcda,*.gcno)

[email protected]:testCov> ls
a  test.c  test.gcda  test.gcno
[email protected]:testCov>

第二步:分析目标文件

[email protected]:testCov> gcov test.c
File ‘test.c‘
Lines executed:100.00% of 33
Creating ‘test.c.gcov‘

[email protected]:testCov>

这时会生成*.gcov的文件,该类文件可能会有多个我们只需要打开目标文件对应的gcov文件即可

[email protected]:testCov> vim test.c.gcov

结果如下

        -:    0:Source:test.c
        -:    0:Graph:test.gcno
        -:    0:Data:test.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:#include <stdio.h>
        -:    2:
        -:    3:char Visit[51];
        -:    4:int Ans[51];
        -:    5:int N;
        -:    6:int Cnt[11];
        -:    7:
    #####:    8:void ForEmptyCheck()
        -:    9:{
    #####:   10:    puts("Here");
    #####:   11:}
        -:   12:
       24:   13:int Sum()
        -:   14:{
       24:   15:    int i, j, Sum = 0;
      120:   16:    for(i = 0; i < N; ++i) {
       96:   17:        int min = Ans[i];
      336:   18:        for(j = i; j < N; ++j) {
      240:   19:            if(Ans[j] < min) {
       58:   20:                min = Ans[j];
        -:   21:            }
        -:   22:        }
       96:   23:        Sum += min;
        -:   24:    }
       24:   25:    ++Cnt[Sum];
       24:   26:    return Sum;
        -:   27:}
        -:   28:
       64:   29:void DFS(int s, int cnt)
        -:   30:{
        -:   31:    int i;
       64:   32:    char over = 1;
       64:   33:    Visit[s] = 1;
       64:   34:    Ans[cnt] = s + 1;
      320:   35:    for(i = 0; i < N; ++i) {
      256:   36:        if(!Visit[i]) {
       60:   37:            over = 0;
       60:   38:            DFS(i, cnt + 1);
       60:   39:            Visit[i] = 0;
        -:   40:        }
        -:   41:    }
       64:   42:    if(over) {
      120:   43:        for(i = 0; i < N; ++i) {
       96:   44:            printf("%d ", Ans[i]);
        -:   45:        }
       24:   46:        printf("\t%d\n", Sum());
        -:   47:    }
       64:   48:}
        -:   49:
        1:   50:int main()
        -:   51:{
        -:   52:    int i;
        1:   53:    N = 4;
        5:   54:    for(i = 0; i < N; ++i) {
        4:   55:        DFS(i, 0);
        4:   56:        Visit[i] = 0;
        -:   57:    }
        8:   58:    for(i=4; i<=10; ++i)
        -:   59:    {
        7:   60:        printf("%d ", Cnt[i]);
        -:   61:    }
        1:   62:    puts("");
        1:   63:    return 0;
        -:   64:}

其中ForEmptyCheck()前面有标记字符串“#####”的字样,表示该函数未被调用;

Sum()前面有标记数字“24”,表示该函数被调用了24次,刚好对应着4!=24

时间: 2024-10-30 19:00:15

C/C++代码覆盖率生成的相关文章

Jenkins部署Python项目实战

一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Jenkins强大的插件功能,轻松实现CI/CD,但如果部署多项目到同一台服务器涉及环境一致性问题,对此可以利用容器技术Docker解决,也可以利用Python虚拟环境例如virutalenv或conda等优秀等工具解决,在此由于后期根据requirements来安装依赖包比较慢,且后期需要将Pytho

Karma +Jasmine+ require JS进行单元测试并生成测试报告、代码覆盖率报告

1. 关于Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner). 该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuous integration). 这个测试工具的一个强大特性就是,它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果. 2. Karma集成Jasmine进行单元测试 a.初始化 NPM 实现初始化 NPM 包管理,创建 package.json 项目管理文件.

解决插件cobertura生成的代码覆盖率报告为0%的问题

在maven 的项目中使用cobertura的插件来生成java代码覆盖率的报告,但实际使用中,经常会出现出现报告的值全部 0%,特此文档来说明如何解决该问题.所有的出现覆盖率为0%的问题均与运行单元测试的插件surefire有关,出现的各种问题均是由于该插件的设置forkcount与reuseForks所影响.如果出现上述问题,请根据以下的说明与要求来配置surefire插件.surefire插件官方说明: https://maven.apache.org/surefire/maven-sur

Maven在生成环境的使用及其配置说明

1.1 Maven使用 1.1.1 nexus相关信息 Maven nexus地址: http://192.168.210.185:8081/nexus Repositories 仓库主要包含以下: Public Repositories Group(组) 包括了 Releases.Snapshots.3rd party .Central.Sonatype Repository 3rd party Hosted(本地库) 主要用于上传远程仓库没有的jar如:ojdbc-1.6.jar dubbo

【java测试】Junit、Mock+代码覆盖率

原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进或重构之后的正确性. 一般来说,单元测试任务包括 接口功能测试:用来保证接口功能的正确性. 局部数据结构测试(不常用):用来保证接口中的数据结构是正确的 比如变量有无初始值 变量是否溢出 边界条件测试 变量没有赋值(即为NULL) 变量是数值(或字符) 主要边界:最小值,最大值,无穷大(

Java单元测试(Junit+Mock+代码覆盖率)

原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进或重构之后的正确性. 一般来说,单元测试任务包括 接口功能测试:用来保证接口功能的正确性. 局部数据结构测试(不常用):用来保证接口中的数据结构是正确的 比如变量有无初始值 变量是否溢出 边界条件测试 变量没有赋值(即为NULL) 变量是数值(或字符) 主要边界:最小值,最大值,无穷大(

展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例

(本人正在參加2015博客之星评选,诚邀你来投票,谢谢:username=zhouzxi">http://vote.blog.csdn.net/blogstar2015/candidate?username=zhouzxi) 近期,由于要展示某项目的单元測试的代码覆盖率.我无意间在网上找到了gcovr工具.使用之后,认为这个工具相当的不错,于是便写下这篇文章,可供相关的开发者參考. 简而言之,gcovr是一个将单元測试中的代码覆盖率以多种方式(包含列表方式.XML文件方式.HTML网页方式

软件工程项目之二:结对编程——四则运算生成计算程序

0x01 :简介 本次的编程任务是完成一个具有UI界面的,具备四则运算生成.计算.判断对错功能的程序.本次程序使用C#语言编写,用时为2周. 0x02 :软件工程和PSP表格记录 PSP 2.1 Persinal Software Process Stages Time(Estimated) Time(Real) Planning 计划     Estimate 估计这个任务需要多少时间 24h 36h Development 开发     Analysis 需求分析(包括学习新技术) 8~10

Jenkins中集成Gcov代码覆盖率报告

最近终于把gcov代码覆盖报告集成到jenkins中了,总算是完成工作,写篇博客总结下. 我循序渐进地用了三个工具:gcov, lcov, gcovr 这三个工具原理(其实gcovr依赖于GNU的gcov的)都是收集你程序run之后所产生的*.gcda文件,总的来说,我个人觉得比较喜欢lcov,应为lcov的报告读起来很不错,可惜它不能集成到Jenkins... 从头说起... 一开始我用的是GNU tool gcov,网上学习了下gcov,生成了xx.cpp.gcov报告,然后就可以查看了,g