用gcov来检查Qt C++程序的代码覆盖率
最近才发现MinGW里面包含一个叫做gcov的工具,可以用来检查你的程序运行时调用了哪些代码,同时显示代码行被调用的次数。这个功能在代码的覆盖率和性能调优方便都能用上。
我的运行环境
- Windows XP
- MinGW(gcc 4.4.0)
- Qt 4.8.4
第一步:编写一个可运行的Qt程序
要用到的文件:hihi.cpp, hihi.pro
- hihi.cpp
- class Haha
- {
- public:
- void hihi() {
- for (int i = 0; i < 100; i++) {
- int j = 0;
- }
- }
- };
- int main(int argc, char *argv[])
- {
- Haha haha;
- haha.hihi();
- return 0;
- }
- hihi.pro
SOURCES += hihi.cpp
QMAKE_CXXFLAGS += --coverage
LIBS += -lgcov
hihi.cpp没什么特别的。主要看看hihi.pro. QMAKE_CXXFLAGS += --coverage 用来告诉g++我们要做coverage。LIBS += -lgcov用来链接gcov库
第二步:编译Qt程序
用下面的命令编译hihi工程
D:\workspace\cpp\hihi>qmake
D:\workspace\cpp\hihi>make release
现在我们的release目录下就有三个文件了。值得注意的是hihi.gcno文件。它存储的是代码段和对应的行号。
D:\WORKSPACE\CPP\HIHI\RELEASE
hihi.exe
hihi.gcno
hihi.o
第三步:运行Qt程序
D:\workspace\cpp\hihi>release\hihi.exe
现在我们的release目录下就有四个文件了。比上一步多了一个hihi.gcda。它存储了hihi.exe运行过程中的一些数据。
D:\WORKSPACE\CPP\HIHI\RELEASE
hihi.exe
hihi.gcda
hihi.gcno
hihi.o
第四步:用gcov来生成报告
D:\workspace\cpp\hihi>gcov hihi.cpp -o release
现在我们的hihi目录下有如下文件。我们要关心的是hihi.cpp.gcov。这个就是hihi.cpp运行的报告文件。
D:\WORKSPACE\CPP\HIHI
│ hihi.cpp
│ hihi.cpp.gcov
│ hihi.pro
│ Makefile
│ Makefile.Debug
│ Makefile.Release
│
├─debug
└─release
hihi.exe
hihi.gcda
hihi.gcno
hihi.o
第五步:查看报告
hihi.cpp.gcov是一个文本文件,内容如下。报告一目了然,最左侧显示的是该行代码运行的次数。比如第5行for语句运行了101次。
- -: 0:Source:hihi.cpp
- -: 0:Graph:release/hihi.gcno
- -: 0:Data:release/hihi.gcda
- -: 0:Runs:1
- -: 0:Programs:1
- -: 1:class Haha
- -: 2:{
- -: 3:public:
- -: 4: void hihi() {
- 101: 5: for (int i = 0; i < 100; i++) {
- 100: 6: int j = 0;
- -: 7: }
- -: 8: }
- -: 9:};
- -: 10:
- 1: 11:int main(int argc, char *argv[])
- -: 12:{
- -: 13:
- -: 14: Haha haha;
- -: 15: haha.hihi();
- -: 16:
- 1: 17: return 0;
- -: 18:}
用gcov来检查Qt C++程序的代码覆盖率的更多相关文章
- Qt应用程序图标设置
Qt应用程序图标设置 本文仅仅适用于windows下,linux等不适用. 下面说的图标,指的是程序文件的图标,而不是托盘图标或者说运行时任务栏的图标(任务栏和程序窗口的图标在windows/linu ...
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 但是好多使用NCReport控件的朋友都不 ...
- QT添加程序图标及窗口图标
程序图标 材料准备 图标文件:*.ico文件,存放在源文件同一目录下,如"myapp.ico" 写入图标 向*.pro文件中,独立一行写入"RC_ICONS = *.ic ...
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...
- Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)
最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到 ...
- 让你的 Qt 桌面程序看上去更加 native(一共六篇)
<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编 ...
- 让qt应用程序支持触摸
一.设备驱动 我的触摸屏是usb接口的 可以参考下这2篇文件 http://blog.csdn.net/paomadi/article/details/8754783 usb触摸屏 http://bl ...
- Qt应用程序中设置字体
Qt应用程序中设置字体 应用程序中经常需要设置字体,例如office软件或者是其他的编辑器软件等等.这里主要涉及到如下几个概念:字体,字号以及风格(例如:粗体,斜体,下划线等等).Qt里面也有对应的类 ...
- CMake结合Visual Studio中开发Qt应用程序注意事项
Qt工程管理 个人比较偏爱于使用CMake来管理C++工程,因为只要编写一个CMakeLists.txt文件,就可以在Windows和Mac上生成各自的IDE工程.在Windows上, CMake自然 ...
随机推荐
- 【leetcode】561. Array Partition I
原题: Given an array of 2n integers, your task is to group these integers into n pairs of integer, say ...
- SpringMVC【一、概述】
今天是端午前最后一天上班,今天开始加上端午3天学习SpringMVC~! 参考资料: http://blog.csdn.net/swingpyzf/article/details/8885459 概述 ...
- pycharm中代码窗口如何分成左右或者上下双栏
操作步骤如下: 其中window->edit_tabs->Split Vertically 是分成左右双栏:选择Split Horizontally 是分成上下双栏
- Spark中资源与任务的关系
在介绍Spark中的任务和资源之前先解释几个名词: Dirver Program:运行Application的main函数(用户提交的jar包中的main函数)并新建SparkContext实例的程序 ...
- Centos安装MySQL5.6并重置密码
数据库配置 如果用的是自带的sqllite那么数据库就可以不动 安装MySQL5.6数据库 这里强烈建议用使用5.6, 5.7版本的数据库遇见了很多BUG 安装MySQL wget http://de ...
- XY//电容
X,Y电容都是安规电容,火线零线间的是X电容,火线与地间的是Y电容.它们用在电源滤波器里,起到电源滤波作用,分别对共模,差模工扰起滤波作用.安规电容是指用于这样的场合,即电容器失效后,不会导致电击,不 ...
- String 属于基础的数据类型吗?(未完成)
String 属于基础的数据类型吗?(未完成)
- kotlin字符串模板&条件控制
字符串模版: 小时候都有要求记日记的习惯,下面是一小学生记的日记: 很漂亮的流水账,那细分析一下这些文件其实大体都类似,只有几个不同点: 其实就是地点变了,那对于这种有规律的文字可以采用kotlin的 ...
- confluence配置搭建
1.环境准备:需要安装jdk.需要mysql5.7数据库,创建数据库confluence并创建用户和密码 CREATE DATABASE `confluence` DEFAULT CHARACTER ...
- PHP函数相关知识点
回调函数 <?php function myfunc($funcname,$name) { $name = "喜欢".$name; $funcname($name); } f ...