gcov使用注意事项-创新互联

以前做过一些gcov方面的工作,最近又做,发现一些踩过的坑被忘记了,又整理了一遍,防止再次出现类似情况。

成都创新互联服务项目包括蒲县网站建设、蒲县网站制作、蒲县网页制作以及蒲县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,蒲县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到蒲县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

使用gcov测试代码覆盖率的流程是:
添加编译选项和链接选项-----》运行程序(设置GCOV_PREFIX,设置GCOV_PREFIX_STRIP环境变量)-----》让程序正常结束(kill不会生成相关.gcda文件)-----》运行gcov命令手动分析或用lcov来分析,lcov可能需要手动安装,安装地址https://github.com/linux-test-project/lcov.git

1,在编译选项中添加-ftest-coverage -fprofile-arcs,
-fkeep-static-functions -fkeep-inline-functions选项可另行选用
在链接选项中添加 -lgcov,特别要注意,编译生成的.so中,也要链接-lgcov,
即在生成的可执行程序和.so中,都需要链接-lgcov

2,运行程序,先设置GCOV_PREFIX和GCOV_PREFIX_STRIP环境变量,也可以不设置,不设置时,生成的.gcda文件在make时的目录及其子目录下,即与相关的源代码路径相同,只是文件名不同。
这两个变量,可以控制生成的.gcda的位置
GCOV_PREFIX_STRIP去掉原代码路径中的前几级,
比如源代码路径为/a/b/c/d.cpp,如果GCOV_PREFIX_STRIP=2
则实际使用的路径是c/d.cpp
如果GCOV_PREFIX=/run/gcov,则.gcda实际存放的路径是/run/gcov/c/d.gcda

程序运行后,可以进行正常的业务测试

3,让程序正常结束,比如处理特定信号并exit(0),或其他方式,把程序kill掉不会生成相关的.gcda

4,gcov命令分析见 gcov -h,下面附一个lcov的小脚本:

#!/bin/sh

#如果lcov没有装,要先装lcov
#可以从 https://github.com/linux-test-project/lcov.git 上装
#使用前注意事项
#1,启用gcov相关编译选项,见make gcov=1
#2,需要在程序运行并正常退出后,运行此脚本,生成相关覆盖率文件

echo "check lcov cmd"
lcov=$(command -v lcov | wc -l)
if [[ ${lcov} == 0 ]]; then
    echo 请先安装 lcov, 安装来源可以参考 https://github.com/linux-test-project/lcov.git
    exit 0
fi

echo "creating ../gcov"
if [[! -d ../gcov ]]; then
    mkdir ../gcov
fi

echo "creating ../gcov/gcov.info"
lcov -c -o ../gcov/gcov.info -d ../src

echo "creating htmls "
if [[! -d ../gcov/html ]]; then
    mkdir ../gcov/html
fi

genhtml -o ../gcov/html ../gcov/gcov.info

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:gcov使用注意事项-创新互联
URL链接:http://abwzjs.com/article/ceiedj.html