Android 编译框架下使用gcov 统计.so代码覆盖率

本文记录了在Android环境下进行程序覆盖率测试的过程,包括在Android.mk中添加CFLAG设置,使用gcovr工具生成HTML报告,并解决遇到的问题,如版本不匹配、Python版本升级及gcovr的安装。遇到的主要挑战是lcov的版本问题,以及Ubuntu 16.04中Python 3.5不支持最新gcovr,需要升级到Python 3.9并安装gcovr。
摘要由CSDN通过智能技术生成

我的需求是在Android编译框架下,可执行程序需要在设备机中执行,而非宿主机。因此走了些弯路,这里记录一下。

编译

在相应的Andriod.mk 中添加如下CFLAG

NATIVE_COVERAGE := true
LOCAL_STATIC_LIBRARIES += libgcov
LOCAL_CFLAGS += -ftest-coverage -fprofile-arcs
LOCAL_LDFLAGS += -ftest-coverage -fprofile-arcs

结果解析

运行后的.gcda 文件需要复制到编译输出件相应的目录,也就是.gcno文件所在目录。
然后使用gcovr 命令来生成html 文件。具体命令如下:
gcovr -r . --gocv-executable “***llvm-cov gocv” --html --html-details -o coverage.html
注意,上面命令中"***llvm-cov gocv"需要指定编译时所使用的编译器对应版本的。
可以在Android.mk 中添加LOCAL_CFLAGS += --verbose 来查看编译时所用的编译器路径

踩坑点

1、我自己安装的lcov 因为版本不匹配我用的llvm版本,因此折腾半天也没成功。换成gcovr 就可以了,gcovr 可以使用–gocv-executable 来指定编译时使用的llvm-cov gcov
2、ubuntu16.04 自带的python3.5 不支持最新的gcovr,并且自带的pip 也没法pip install gocvr。需要安装3.6以上的python版本。安装方法可以参考以下命令

sudo apt install wget build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
现在,从官方下载站点下载Python 3.9源代码。切换到relevent目录,然后使用wget下载源文件。
cd /opt
sudo wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz
接下来,解压缩下载的存档文件,并准备安装源。
tar xzf Python-3.9.0.tgz
cd Python-3.9.0
sudo ./configure --enable-optimizations
Python源已准备好安装。执行make altinstall命令以在系统上安装Python 3.9。
sudo make altinstall
make altinstall用于防止替换默认的python二进制文件/usr/bin/python。
Python 3.9已安装在Ubuntu 18.04系统上。验证安装的版本:
python3.9 -V

注意使用最新安装的pip 来安装gcovr。gcovr 可能会被安装在python/bin 之类的目录下,系统环境路径可能没有包含,自己找一下就可以。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值