使用Bazel自定义覆盖率配置时部分文件缺失gcno文件的问题
Bazel代码覆盖率配置问题
由于是通过Python脚本运行自定义目标,无法直接使用bazel coverage命令,以下是当前配置步骤及遇到的问题:
一、配置步骤
- 在
.bazelrc中添加如下配置:
build:coverage --collect_code_coverage build:coverage --instrumentation_filter="^//src[/:]" coverage --instrumentation_filter="^//src[/:]"
- 根目录BUILD文件中添加:
config_setting( name = "Coverage", flag_values = { ":coverage": "true", }, ) bool_flag( name = "coverage", build_setting_default = False, )
- 在
cc_binary规则中引入覆盖率编译、链接选项:
+ select({"//:Coverage": coverageCopts, "//conditions:default": [], }), // 以及 select({"//:Coverage": coverageLopts, "//conditions:default": [], }),
其中编译和链接选项定义为:
coverageCopts = ["--coverage", "-fprofile-abs-path", "-fprofile-arcs", "-ftest-coverage"] coverageLopts = ["--coverage", "-lgcov"]
- 运行Python脚本的命令:
bazel run --subcommands --//\:coverage=true script:runner
二、问题现象
- 部分CPP文件缺失
gcno文件; - 同一库中的相邻文件可正常生成
gcno文件; - 排查
bazel --subcommands输出,确认缺失文件的编译命令已带有--coverage标志; - 执行
bazel clean --expunge后问题依旧存在。
内容的提问来源于stack exchange,提问作者Ulrich Von Rekkenin
相关产品推荐
相关产品推荐

