gcc覆盖测试用于嵌入式设备-gcov lcov genhtml

转载:https://www.cnblogs.com/StitchSun/p/4480229.html

交叉编译链为:/opt/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcov"

环境要求:

1、有被测的源代码

2、对应平台的交叉编译器必须包含gcov功能

3、安装好lcov工具

4、相应的嵌入式设备

 

使用gcov/lcov测试代码覆盖率,总共分为三步:

1、在源码编译中添加gcov编译参数,然后编译debug版本,同时生成gcno文件

2、执行生成的程序,生成代码覆盖文件gcda

3、使用lcov工具解析gcno和gcda文件,生成html报表文件

 

下面详细说明三个步骤如何操作:

 

1、在源码编译中添加编译参数


需要添加的编译参数为:-fprofile-arcs -ftest-coverage;同时添加参数对应的库-lgcov

 

添加完成后,进行编译。然后查找,找到生成的后缀名为gcno文件的话,则说明成功。

 

重要:gcno文件生成的路径,这个一般是根据Makefile脚本指定的不同路径来确定的,有的时候与源代码在一起,有的时候与中间文件在一起。

但是不管gcno的路径在哪里,要记住这个路径。后续有用的。

 

2、执行测试程序

   把编译好的测试程序在对应的设备上执行测试,执行没有错误后,然后查看嵌入式设备的目录,到与生成gcno路径一致的目录下,查找gcda文件

   gcda文件生成路径为编译时生成gcno的路径,不过gcno是在编译服务器上,gcda是在程序运行的嵌入式设备上。

 

3、使用lcov解析gcda和gcno文件

   把设备的gcda文件下载到编译服务器,同时把编译时生成的gcno文件也复制到同一个目录。

   对于前面名称相同的文件,gcda和gcno文件必须在同一目录下。    

 

   要使用lcov工具,可以在http://ltp.sourceforge.net/coverage/lcov.php 下载最新的版本。

   但是这个工具无法直接解析嵌入式平台产生的gcno和gcda格式的文件,需要修改一个地方。

   即这个工具默认的是使用linux系统自带的gcov,需要修改为使用交叉编译器的gcov工具。

   修改的文件为:bin/geninfo 的,把原来的gcov修改为交叉编译的gcov。

修改完成,保存退出。

以使用的arm-linux-gcc 4.5.1 交叉编译器为例,执行下面的命令:

     a   /usr/local/bin/lcov -d .  -c -o test.info

 

     b   /usr/local/bin/genhtml -o result test.info

         

      看到上面的提示,说明执行成功了。把result文件夹下载到windows上,打开里面的index,就可以看到结果了。  

常见问题:

1、geninfo: ERROR: …: reached unexpected end of file

 注意,lcov 最好使用 1.9 及以上版本,否则可能遇到如下错误:

geninfo: ERROR: …: reached unexpected end of file

2、 gcov解决stamp mismatch with graph file

使用 hexdump -e '"%x\n"' -s8 -n4 命令分别解析 XXX.gcno和XXX.gcda文件

如果生成的码不一致,则说明gcno和gcda不是一次编译生成的,需要重新编译。

命令使用如下:

hexdump -e '"%x\n"' -s8 -n4 dns_shell.gcno

3、找不到源代码

在解析gcno和gcda时,要和源代码在一个服务器上,并且源代码的路径在生成gcno和gcda后

没有变动过。不然会提示找不到源代码。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值