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平台下,早在几年前,我还没找到特别好用又开源的覆盖率工具,所以 ...
随机推荐
- 为什么.Net要求序列化的类必须有一个无参数的构造函数
刚才用xml序列化器,序列化一个类,结果报错说序列化的类必须带有一个无参的构造函数,好奇怪啊.为什么要有这么苛刻的条件,而且xml序列化还要求序列化的成员是public. 我以前一直觉得序列化器是一个 ...
- Tableau修改参考线上显示的标签
修改Tableau中参考线上的标签显示内容,如下图所示:可根据自定义调整
- 3level_menus
# encoding: utf-8 # Creator:耿亚月 Creation time:2017-1-2 # Modifier:耿亚月 Modification time:2017-1-2 #输入 ...
- mysql5.7碰到的坑
日志输出时区问题 输出日志有这些信息2016-08-16T02:23:09.831827Z 112241 [Note] Aborted connection 112241 to db: 'test' ...
- ORACLE 空表不能导出问题解决
exp不导出空表,是11g的新特性,当表无数据时,不分配segment,以节省空间,所以exp导出的时候,不导出这些表. 先登录要导出的用户执行以下语句 先执行 select 'alter table ...
- Linux 文件访问权限
定义:<sys/stat.h> 每个文件有9个访问权限,可将其分为3类: 标记 含义 S_IRUSR 用户读 S_IWUSR 用户写 S_IXUSR 用户执行 S_IRGRP 组读 S_I ...
- μC/OS-Ⅲ系统的中断管理
一.典型的μC/OS-Ⅲ中断服务程序解析 μC/OS-Ⅲ系统中典型有内核参与中断服务程序示例如下: MyISR: ...
- tips of my ubuntu 16.04 LTS
update_0 : sudo .../idea.sh 才会把idea安装上,不加sudo也会启动,但是不会在开始菜单中找到程序. ---------------------------------- ...
- Bootstrap <基础二十二>超大屏幕(Jumbotron)
Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...
- 面试复习(C++)之堆排序
#include <iostream> using namespace std; void Maxheap(int *a,int i,int heapSize)//最大数调整 { +;// ...