我的需求是在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 之类的目录下,系统环境路径可能没有包含,自己找一下就可以。