最近做arm-linux 下的项目,需要生成单元测试代码覆盖率报告。百度查到的基本都是x86架构下的生成方式,编译添加gcc的-g -Wall --coverage选项,并使用lcov,genhtml配合生成html格式的代码测试覆盖率报告,这里就不多说了,大家问度娘都可以找到。但是在把代码用交叉编译工具编译后,放到ARM-linux下运行后,出现一些问题。下面简单介绍一下。
1. 在把可执行文件下载到ARM-linux上执行程序后没有生成*.gcda文件,后来经过研究,程序生成了对应的*.cda文件,生成路径和在x86宿主机的文件路径完全一样,这块需要注意。举例说明一下,比如:宿主机的源代码在/root/Desktop/test/目录下,编译后的可执行文件下载到ARM-linux后,执行测试后,生成的*.gcda文件就在ARM-linux下的/root/Desktop/test/目录下,如果该目录不存在,会自动创建该目录,并把生成的文件存放到该目录。
2. 测试完成后,需要把*.gcda文件回传到宿主机,并和编译是的源代码放在同一个目录下,便于和编译时生成的*.gcno文件一起生成报告,这时如果宿主机的x86的gcc编译器版本和arm-linux-gcc的版本不一致的话,会出现一些麻烦,使用宿主机测试程序可以使用lcov的报告生成命令就会报错,报版本错误,比如:version ‘405*’ perfer '504*',这是由于我的宿主机的gcc版本是5.4而arm-linux-gcc的版本是4.5导致的,这时可以使用lcov的命令选项--gcov-tool 添加arm-linux-gcov的完整路径来指定要求使用的gcov工具,这样报错问题就可以解决问题,命令如:lcov -c -d . --gcov-tool /usr/local/bin/arm-linux-gcov -o app.info。
注意:在安装lcov后,默认是不打开分支覆盖率统计功能的,需要自己去修改配置文件打开,配置文件为/etc/lcovrc,打开文件后把lcov_branch_coverage改为1.