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

SonarQube 6.3.1版本下如何扫描gcno文件获取C文件代码覆盖率?

SonarQube 6.3.1 处理C代码覆盖率(基于gcno文件)的方案解析

嘿,针对你用SonarQube 6.3.1获取C文件代码覆盖率的需求,我来给你梳理清楚核心问题:

先给结论:gcno转gcov再上传是当前版本的最优方案

SonarQube 6.3.1搭配的SonarCFamily插件(当时的C/C++支持插件)并不直接解析gcno文件,它依赖gcov生成的.gcov文件来提取覆盖率数据。所以把gcno(编译生成的结构信息文件)配合gcda(测试运行后生成的执行数据文件)转换为gcov文件,再提交给SonarQube,是官方认可的标准流程,也是这个版本下最稳妥、最可靠的方案,完全称得上最优选择。

具体操作的关键步骤

  • 编译阶段:生成gcno文件
    编译C代码时必须添加GCC的覆盖率编译参数:-fprofile-arcs -ftest-coverage,这样编译完成后会在编译输出目录生成对应的.gcno文件,它记录了代码的分支、函数等结构信息。
  • 测试运行:生成gcda文件
    执行你的测试用例或程序,运行完成后会在相同目录生成.gcda文件,它记录了代码实际被执行的次数、分支跳转情况等数据。
  • 转换生成gcov文件
    使用gcov命令将对应的.gcno和.gcda转换为SonarQube能识别的.gcov文件,示例命令如下:
    # 假设gcno/gcda在build目录下,源文件是src/main.c
    gcov -o ./build src/main.c
    
    注意要指定gcno/gcda所在的目录,确保gcov能正确关联到对应的编译文件。
  • SonarQube扫描配置
    在你的sonar-project.properties配置文件中,添加gcov文件的路径配置:
    sonar.cfamily.gcov.reportsPath=./path/to/gcov/files
    
    之后执行sonar-scanner命令启动扫描即可,SonarQube会自动读取gcov文件并展示覆盖率数据。

有没有其他替代方案?

在6.3.1这个版本里,几乎没有更优的替代方式。后续更高版本的SonarCFamily插件支持直接解析lcov格式的报表(可以用gcovr或lcov工具把gcno/gcda转成lcov文件),但6.3.1版本还不支持这种方式,所以老老实实走gcov转换的流程是最靠谱的。

几个要注意的细节

  • 确保使用的gcov版本和编译代码的GCC版本完全一致,版本不匹配可能导致gcov无法正确解析gcno/gcda文件。
  • 生成的gcov文件要和源代码的路径对应准确,SonarQube需要匹配到对应的源文件才能正确展示覆盖率数据。
  • 扫描前要确认所有需要的gcov文件都已生成,并且配置的路径正确,否则SonarQube会无法读取覆盖率信息。

内容的提问来源于stack exchange,提问作者Chen Ben Ezra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:00:44