gcovr参数配置完整却生成空GCC代码覆盖率报告的原因是什么?
gcovr生成空代码覆盖率报告的常见原因
- 编译阶段未添加覆盖率相关编译参数
编译C/C++代码时必须额外添加-fprofile-arcs -ftest-coverage编译选项,链接阶段也要添加-lgcov依赖,缺少这些参数不会生成用于统计覆盖率基础信息的.gcno文件,gcovr无法读取到任何统计数据 - 未运行编译生成的二进制程序
仅完成编译不会生成运行时统计数据,必须执行一次编译产出的测试程序或业务程序,运行后才会生成包含执行信息的.gcda文件 - 路径参数配置错误
确认--object-directory参数传入的路径是存放编译产出的.o、.gcno文件的正确构建目录,路径错误会导致gcovr找不到统计文件 - 源码/构建目录路径发生变更
如果你在编译完成后移动过源码目录、构建目录,或是编译时使用了相对路径,会导致gcovr无法匹配源码和统计文件的对应关系,可添加-v参数运行gcovr查看debug日志,确认路径匹配问题 - 统计文件无读取权限
检查构建目录下的.gcno、.gcda文件是否对当前执行gcovr的用户开放可读权限,权限不足会导致gcovr跳过读取 - gcc与gcov版本不匹配
若系统内安装了多个版本的gcc,编译代码使用的gcc版本和gcovr默认调用的gcov版本不一致时,会出现统计文件无法解析的问题,可添加--gcov-executable <对应版本的gcov路径>参数指定匹配的gcov程序
内容的提问来源于stack exchange,提问作者Amalorpavadoss Kulandaisamy
相关产品推荐
相关产品推荐

