对c++服务端进行覆盖率统计
(1)首先需要为每个被测程序的所有编译文件增加选项,如果文件太多,这无疑是灾难,可利用spec文件达到目的
- sed -i '$ a\export LD_PRELOAD=/usr/local/bin/ccover_tool/gcov_out.so' /home/ads/.bash_profile
- SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs
- gcc -dumpspecs >$SPECFILE
- sed -i '/^\*libgcc:/ { n; s/$/ -lgcov/; }' $SPECFILE
- sed -i '/^\*cc1:/ {n; s/$/ -fprofile-arcs -ftest-coverage/; }' $SPECFILE
- sed -i '/^\*cc1plus:/ {n; s/$/ -fprofile-arcs -ftest-coverage/; }' $SPECFILE
(2)其次,服务程序在正常退出的时候调用exit()才会dump统计信息,而常驻内存的服务使用kill -9 模式,需要捕捉kill信号
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #define SIMPLE_WAY
- void sighandler(int signo)
- {
- #ifdef SIMPLE_WAY
- exit(signo);
- #else
- extern void __gcov_flush();
- // flush out gcov stats data
- __gcov_flush();
- // raise the signal again to crash process
- raise(signo);
- #endif
- }
- __attribute__ ((constructor))
- void ctor()
- {
- int sigs[] = {
- SIGILL, SIGFPE, SIGABRT, SIGBUS,
- SIGSEGV, SIGHUP, SIGINT, SIGQUIT,
- SIGTERM
- };
- int i;
- struct sigaction sa;
- sa.sa_handler = sighandler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESETHAND;
- for(i = 0; i < sizeof(sigs)/sizeof(sigs[0]); ++i) {
- if (sigaction(sigs[i], &sa, NULL) == -1) {
- perror("Could not set signal handler");
- }
- }
- }
讲上述打包为.so
- gcov_out.so:gcov_out.c
- gcc -shared -fPIC gcov_out.c -o gcov_out.so
然后设置export LD_PRELOAD=gcov_out.so
(3)部署执行:由于执行和代码必须在一起;还必须指定所使用的代码路径;
(4)合并统计:分布式系统执行在不同的机器上,则需要把每个机器上面的信息收集进行合并操作;
对c++服务端进行覆盖率统计的更多相关文章
- 使用Jacoco统计服务端代码覆盖情况实践
一.背景 随着需求的迭代,需求增加的同时,有可能会伴随着一些功能的下线.如果不对系统已经不用的代码进行梳理并删除不需要的代码,那么就会增加系统维护成本以及理解成本.但经历比较长的迭代以及系统交接,可能 ...
- 8点了解Java服务端单元测试
一. 前言 单元测试并不只是为了验证你当前所写的代码是否存在问题,更为重要的是它可以很大程度的保障日后因业务变更.修复Bug或重构等引起的代码变更而导致(或新增)的风险. 同时将单元测试提前到编写正式 ...
- 移动APP服务端设计开发注意要点
2014年,移动APP的热度丝毫没有减退,怎么为您的移动端app设计良好的服务器端接口(API)呢? 下面谈谈我个人的一些想法. 2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站 ...
- 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)
因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...
- 服务端性能测试校准v1.2
服务端性能测试工具校验v1.2 想知道压力工具实际并发多少,想知道压力工具统计响应数据准不准,来试试这款校准工具. 更新说明: 1.修正总接收请求显示上限. 2.随着响应时间增加,自动增加处理线程. ...
- 服务端性能测试工具校验v1.1
服务端性能测试工具校验v1.1 更新说明: 1.精简CRT运行库支持. 2.添加响应模拟测试,校验压力测试工具的响应时间统计准确性. 3.大并发请求请降低延迟时间 WEIMJSAM原创,转载请注明出处 ...
- loadrunner 编写socket脚本实例(附服务端实现)
一.socket背景知识 这个咱就不废话了,网上一搜一大堆 二.本实例实现的功能 服务端接收客户端发送的字符串,并返回"5678succ"共8个字符 三.服务端实现(java代码) ...
- .Net分布式异常报警系统-服务端Service
服务端的2个Service 1. HandleService: 从Redis中获取异常信息, 入库并发送通知到相关责任人. 2. HealthyCheckService: 对站点指定页面进行模拟访问 ...
- 动手学习TCP:服务端状态变迁
上一篇文章介绍了TCP状态机,并且通过实验了解了TCP客户端正常的状态变迁过程. 那么,本篇文章就一起看看TCP服务端的正常状态变迁过程 服务端状态变迁 根据上一篇文章中的TCP状态变迁图,可以得到服 ...
随机推荐
- 记录:Ubuntu下配置Eclipse
>>下载Eclipse. 下载链接:http://www.eclipse.org/downloads/ 我选择了64bit的版本 >>安装Eclipse. 解压文件: tar ...
- jsp中如何获得url路径和绝对路径
jsp中如何获得url路径 request.getHeader("referer") JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径:request.getReq ...
- SQLServer加入域后无法远程连接
如果您更改的SQLServer的远程连接端口(默认1433),加入域后,防火墙会把自定义规则都禁用掉 所以,你得进防火墙,查看,是否防火墙关闭了,我的就是关闭了,找了半天原因
- Android基础知识回顾
- noip 2015 提高组
算是填个坑吧 , QwQ Day 1 第一题很水,就是考代码能力 ,直接贴代码. #include <iostream> #include <cstdlib> #include ...
- ueditor编辑器图片自定义存放目录及路径修改
百度编辑器ueditor功能强大,很多人士以应用项目开发中,但是里面有一个公众的问题就是上传图片存放目录太深,默认是ueditor/php/upload下,前不久测试后图片存放目录可以改变,但是路径会 ...
- jquerymobile知识点:动态Grid的绑定以及刷新
下面jquerymobile是ajax动态绑定和刷新的例子.直接上图以及代码. 下面是实例代码: //初始绑定 function GetInitBind(PageIndex, PageSize, sq ...
- EasyUI-动态添加tab
layout效果 代码: <%@ page language="java" contentType="text/html; charset=utf-8" ...
- Freemarker学习中遇到的问题
在网上找到了尚学堂的视频,同时有书和源码等资料.但是在跟着练习的过程中,代码运行报了错: 2015-7-20 22:26:40 freemarker.log.JDK14LoggerFactory$JD ...
- 墙裂推荐 iOS 资源大全
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...