C/C++代码覆盖率生成
初始状态下只有一个源代码文件
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++代码覆盖率生成的更多相关文章
- Jenkins部署Python项目实战
一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...
- Oracle 11g数据库详解(2)
FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...
- Karma +Jasmine+ require JS进行单元测试并生成测试报告、代码覆盖率报告
1. 关于Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner). 该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuou ...
- HttpRunnerManager平台异步生成及展示代码覆盖率报告
ant+jacoco+jenkins+HttpRunnerManager代码覆盖率统计平台搭建 实现思路通过jenkins构建,并使用HttpRunnerManager异步实现报告更新与展示. 现在整 ...
- 【Azure DevOps系列】Azure DevOps生成代码覆盖率
前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...
- jacoco-统计代码覆盖率并生成报告
一.概述: 作为一个合格的测试人员,保证产品的软件质量是其工作首要目标,为了这个目标,测试人员常常会通过很多手段或工具来加以保证,覆盖率就是其中一环比较重要的环节. 通常我们会将测试覆盖率分为两个部分 ...
- Python 代码覆盖率统计工具 coverage.py
coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...
- 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...
- C++开源代码覆盖率工具OpenCppCoverage介绍(Windows)
关于代码覆盖率统计工具,Linux平台下,gcc内置支持gcov,通过编译时加参数选项,进行代码插桩,从而实现代码覆盖率.在Windows平台下,早在几年前,我还没找到特别好用又开源的覆盖率工具,所以 ...
随机推荐
- Mac OS 下 mysql 找不到 mysql.sock 的问题
mysql.sock 无法找到一般存在两种问题,一是mysql服务未启动,mysql.sock没有生成,二是mysql.sock的指向位置出错,在指向位置加个mysql.sock的软链接就可以解决. ...
- Eclipse 创建maven项目
新建maven project
- Web前端开发规范手册
一.规范目的 1.1 概述 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. ...
- Oracle表的建立条件
约束:1.非空约束a.字段不能为nullb.null 不等于 ''空字符串,oracle不允许把''写入到非空字符串型字段中2.主键约束a.指定某一列或某几列为主键列b.主键列必须具有非空约束c.主键 ...
- Android ORM应用开发框架KJFrameForAndroid使用详解
本文将为大家介绍一款Android ORM应用开发框架KJFrameForAndroid,很多时候我们也叫它KJLibrary. KJFrameForAndroid简介 KJFrameForAndro ...
- μC/OS-Ⅲ系统的任务切换和任务调度
一.任务切换 在操作系统中当任务需要从一个任务切换到另外一个任务时,要将当前任务的现场保存到当前任务的堆栈中(当前任务现场主要指CPU相关寄存器),然后回复新任务的现场并执行新任务.这个叫做上下文切换 ...
- [转载]Three Trending Computer Vision Research Areas, 从CVPR看接下来几年的CV的发展趋势
As I walked through the large poster-filled hall at CVPR 2013, I asked myself, “Quo vadis Computer V ...
- 发布自己的pods到CocoaPods trunk 及问题记录
这两天准备把之前写的一些小玩意添加到pods库中去,参考了一些资料后进行操作,实际中也遇到了一些问题,记录下来,问题及解决方式在后面. 参考内容转载如下: 首先更新了用trunk之后,CocoaPod ...
- (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构
在网上下了一个jQuery 1.2.6的源码分析教程,看得似懂非懂,于是还是去github上下载源码,然后慢慢看源代码学习,首先来说说core.js这个核心文件吧. jQuery整体的基本架构说起来也 ...
- mybatis3.2.3+spring3 控制台打印sql解决办法
学习mybatis的时候遇到打印不出sql 的问题,在这里做个总结: 1:首先log4j.properties这样配置: log4j.rootLogger=DEBUG,console,R log4j. ...