gcov lcov进行 android apk项目的 code coverage 代码覆盖率检测
最近在做code coverage,看了很多博客,大都说到了最基本的一些要求,
比如在用gcc编译的时候加入
CFLAGS=-fprofile-arcs -ftest-coverage
和LDFLAGS=-lgcov -lgcc
参数,就可生成*.gcno文件,
然后运行生成的可执行文件,就会在*.gcno文件对应目录下输出*.gcda文件,
然后运行gcov *.cpp
会生成*.cpp.gcov
文件,
查看可看到该cpp里的语句执行了几次,然后运行
lcov --capture --directory . --output-file testHtml.info --test-name testHtml; genhtml -o result testHtml.info
可生成result文件夹,打开里面的index.html即可看到结果。
但是这是对于一般的c/c++项目,而且是在编译的机器上直接运行可执行文件,如果我是把可执行文件放到别的电脑上运行,又或者我不是运行一个简单的类似于“hello world!”
的可直接在终端运行的程序,而是一个需要在android
系统里运行的apk
,那这样的话,运行可执行文件就无法输出*.gcda
文件了,很多博客里并没有提到这一特殊情况,或者说没有讲的很明白,让初学者无从下手,这时该怎么办呢?
一、如果在别的电脑上运行,有两种方法:
①设置环境变量,gcov
可设置两个环境变量来指定*.gcda
文件的输出路径:GCOV_PREFIX, GCOV_PREFIX_STRIP
。在终端输入export GCOV_PREFIX=/home/$user/a/
运行程序后将在/home/$user/a/
下输出*.gcda
文件,并且目录和*.gcno
文件保持一致,如果同时在终端输入export GCOV_PREFIX_STRIP=$n
,那么*.gcda
的目录就会减少$n层,一般不用设置这个环境变量。
②在编译源码的时候加入另一个参数-