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









本文转自 hakuyo 51CTO博客,原文链接:http://blog.51cto.com/hakuyo/2059869,如需转载请自行联系原作者
目录
相关文章
|
存储 算法 测试技术
关于HOperatorSet.CountChannels的注意事项
关于HOperatorSet.CountChannels的注意事项
|
6月前
|
前端开发 JavaScript API
reactAPI讲解以及注意事项
reactAPI讲解以及注意事项
32 2
|
存储 安全 Java
TheadLocal的使用场景和注意事项
TheadLocal的使用场景和注意事项
107 0
|
网络协议
AFNetWork3.0使用注意事项
AFNetWork3.0使用注意事项
172 0
|
Python
函数注意事项
# 函数的位置参数必须要传实参,可以按位置,也可以按关键字传 # 函数的默认参数可以不传实参,可以按位置,也可以按关键字 # 不定长参数*args只收集位置参数形成元组,不定长参数应放在后面,要不会把实参当做位置参数然后报错 # 用**,只要定义了关键字参数,以后针对这个参数传值就必须是关键字形式...
979 0
|
关系型数据库 PostgreSQL