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

nosoul@linux:testCov> ls
test.c
nosoul@linux:testCov>

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

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

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

nosoul@linux:testCov> ls
a test.c test.gcda test.gcno
nosoul@linux:testCov>

第二步:分析目标文件

nosoul@linux:testCov> gcov test.c
File 'test.c'
Lines executed:100.00% of
Creating 'test.c.gcov' nosoul@linux:testCov>

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

nosoul@linux:testCov> vim test.c.gcov

结果如下

        -:    :Source:test.c
-: :Graph:test.gcno
-: :Data:test.gcda
-: :Runs:
-: :Programs:
-: :#include <stdio.h>
-: :
-: :char Visit[];
-: :int Ans[];
-: :int N;
-: :int Cnt[];
-: :
#####: :void ForEmptyCheck()
-: :{
#####: : puts("Here");
#####: :}
-: :
: :int Sum()
-: :{
: : int i, j, Sum = ;
: : for(i = ; i < N; ++i) {
: : int min = Ans[i];
: : for(j = i; j < N; ++j) {
: : if(Ans[j] < min) {
: : min = Ans[j];
-: : }
-: : }
: : Sum += min;
-: : }
: : ++Cnt[Sum];
: : return Sum;
-: :}
-: :
: :void DFS(int s, int cnt)
-: :{
-: : int i;
: : char over = ;
: : Visit[s] = ;
: : Ans[cnt] = s + ;
: : for(i = ; i < N; ++i) {
: : if(!Visit[i]) {
: : over = ;
: : DFS(i, cnt + );
: : Visit[i] = ;
-: : }
-: : }
: : if(over) {
: : for(i = ; i < N; ++i) {
: : printf("%d ", Ans[i]);
-: : }
: : printf("\t%d\n", Sum());
-: : }
: :}
-: :
: :int main()
-: :{
-: : int i;
: : N = ;
: : for(i = ; i < N; ++i) {
: : DFS(i, );
: : Visit[i] = ;
-: : }
: : for(i=; i<=; ++i)
-: : {
: : printf("%d ", Cnt[i]);
-: : }
: : puts("");
: : return ;
-: :}

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

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

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

  1. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  2. Oracle 11g数据库详解(2)

    FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...

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

    1. 关于Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner). 该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuou ...

  4. HttpRunnerManager平台异步生成及展示代码覆盖率报告

    ant+jacoco+jenkins+HttpRunnerManager代码覆盖率统计平台搭建 实现思路通过jenkins构建,并使用HttpRunnerManager异步实现报告更新与展示. 现在整 ...

  5. 【Azure DevOps系列】Azure DevOps生成代码覆盖率

    前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...

  6. jacoco-统计代码覆盖率并生成报告

    一.概述: 作为一个合格的测试人员,保证产品的软件质量是其工作首要目标,为了这个目标,测试人员常常会通过很多手段或工具来加以保证,覆盖率就是其中一环比较重要的环节. 通常我们会将测试覆盖率分为两个部分 ...

  7. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  8. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...

  9. C++开源代码覆盖率工具OpenCppCoverage介绍(Windows)

    关于代码覆盖率统计工具,Linux平台下,gcc内置支持gcov,通过编译时加参数选项,进行代码插桩,从而实现代码覆盖率.在Windows平台下,早在几年前,我还没找到特别好用又开源的覆盖率工具,所以 ...

随机推荐

  1. Vue2.X的路由管理记录之 钩子函数(切割流水线)

    $route可以在子组件任何地方调用,代表当前路由对象,这个属性是只读的,里面的属性是 immutable(不可变) 的,不过你可以 watch(监测变化) 它. 导航和钩子函数: 导航:路由正在发生 ...

  2. guava学习--ComparisonChain

    转载:https://my.oschina.net/realfighter/blog/349824 在日常的工作中,我们经常需要对两个对象进行比较,以找出其中的异同, Java中提供了compare/ ...

  3. Shell Script (2) - global.sh

    cd web/ui npm run e2e-dev -- -i 1 "should be able to add function with argument to a ingredient ...

  4. 使用R进行地图相关的可视化

    Here is a solution using the geosphere and maps package. Using the gcIntermediate function you can & ...

  5. js中,全局变量与直接添加在window属性的区别

    在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢? 其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上 ...

  6. 动态加载jQuery

    success: function(data){ for(var i in data){ $('.x-details>ul:eq(0)').append("<li>&quo ...

  7. JS设置弹出小窗口。

    经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项.版权信息.警告.欢迎光顾之类的话或者作者想要特别提示的信息.其实制作这 ...

  8. python 中的高级函数sorted()

    Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...

  9. VMware Workstation安装MAC OS X系统

    http://jingyan.baidu.com/article/ff411625b9011212e48237b4.html

  10. boost和std中的thread的引用参数

    boost 1.60.0 先上代码: #include <boost/thread.hpp> #include <iostream> void add(int &i) ...