You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ARM工具链的多应用多服务仓库代码覆盖率获取方法咨询

ARM架构代码仓库多应用/服务及公共依赖的代码覆盖率获取方案

针对你这种包含多应用、多服务及公共依赖文件夹的ARM代码仓库,可通过以下步骤实现全范围代码覆盖率统计:

一、编译阶段配置覆盖率选项

无论应用、服务还是公共依赖代码,编译时都需开启覆盖率统计开关,确保生成覆盖率数据文件:

  • 使用ARM交叉编译工具链(如arm-none-eabi-gcc)时,添加编译/链接选项:--coverage(该选项等价于-fprofile-arcs -ftest-coverage,会生成.gcno编译信息文件)
  • 确保公共依赖文件夹的代码在被各服务引用编译时,同样带上上述选项,这样公共代码的执行情况会被关联到调用它的服务测试中

二、执行测试并收集覆盖率数据

1. 测试执行

  • 若在ARM目标板上运行测试:直接在目标板上执行各服务的测试程序,程序运行后会在当前目录生成.gcda执行数据文件
  • 若用QEMU模拟运行:通过QEMU启动测试程序,运行完成后同样会生成.gcda文件,可直接在主机对应源码目录获取

2. 同步数据文件

将目标板或QEMU环境中生成的.gcda文件,拷贝回主机仓库的对应源码目录(需保持目录结构一致,比如目标板上/app/service1/test/.gcda要拷贝到主机repo/application/service1/test/下)

三、生成覆盖率报告(使用lcov工具)

lcov可批量处理多文件覆盖率数据,并生成直观的HTML报告,步骤如下:

  1. 清零旧计数器(避免历史数据干扰):
lcov --directory . --zerocounters
  1. 收集全仓库覆盖率数据:
lcov --directory . --capture --output-file raw_coverage.info --gcov-tool arm-none-eabi-gcov

注意:--gcov-tool需指定对应ARM版本的gcov工具,确保能解析ARM编译生成的覆盖率文件

  1. 过滤无关文件(可选,比如排除测试文件、系统头文件):
lcov --remove raw_coverage.info '/usr/*' '*/test/*' --output-file filtered_coverage.info
  1. 生成HTML可视化报告:
genhtml filtered_coverage.info --output-directory coverage_report

打开coverage_report/index.html即可查看各应用、服务及公共文件夹的详细覆盖率数据

四、多服务覆盖率合并(可选)

如果需要单独统计每个服务的覆盖率,再合并为全仓库报告:

  1. 单独收集每个服务的覆盖率数据:
lcov --directory ./application/service1 --capture --output-file service1_coverage.info
lcov --directory ./application/service2 --capture --output-file service2_coverage.info
  1. 合并多个服务的覆盖率文件:
lcov --add-tracefile service1_coverage.info --add-tracefile service2_coverage.info --output-file combined_coverage.info
  1. 基于合并后的文件生成最终报告即可

关键注意事项

  • 公共依赖代码的覆盖率会自动统计到所有调用它的服务测试数据中,合并后即可看到公共代码的整体被覆盖情况
  • 确保交叉编译工具链版本与lcov、gcov工具兼容,避免出现解析失败
  • 若测试程序需要依赖库,需确保依赖库同样编译了覆盖率选项(如果需要统计依赖库的覆盖率)

内容的提问来源于stack exchange,提问作者aditya kasaudhan AP2211002006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 11:39:51