find 查找 Bazel 构建覆盖率文件的一个☝️坑

2024-06-21 07:20

本文主要是介绍find 查找 Bazel 构建覆盖率文件的一个☝️坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Bazel 是由 Google 开发的一个高效、可扩展的开源构建和测试工具,主要用于管理大型代码库。它支持多语言(如 C++, Java, Python)和多平台构建,通过强大的构建缓存和并行化机制显著提高构建速度。

背景

利用Bazel构建项目时,想要通过它生成覆盖率报告,其中有一个关键文件,是在构建项目时一并生成的gcno类型的文件。但是,利用find查找却无法找到。

# 设定参数生成覆盖率文件
$bazel build --copt=--coverage --linkopt=-lgcov --spawn_strategy=standalone --genrule_strategy=standalone --collect_code_coverage   //main:hello_test
DEBUG: Rule 'gtest' indicated that a canonical reproducible form can be obtained by modifying arguments commit = "58d77fa8070e8cec2dc1ed015d66b454c8d78850" and dropping ["branch"]
DEBUG: Repository gtest instantiated at:/apsara/jiaomian.wjw/bazel-example/examples-main/cpp-tutorial/stage-test/WORKSPACE:2:15: in <toplevel>
Repository rule git_repository defined at:/apsara/jiaomian.wjw/.cache/bazel/_bazel_jiaomian.wjw/85047200f6c215149976ede38a6439b5/external/bazel_tools/tools/build_defs/repo/git.bzl:189:33: in <toplevel>
INFO: Analyzed target //main:hello_test (77 packages loaded, 1220 targets configured).
INFO: Found 1 target...
Target //main:hello_test up-to-date:bazel-bin/main/hello_test
INFO: Elapsed time: 1815.686s, Critical Path: 5.57s
INFO: 29 processes: 10 internal, 19 local.
INFO: Build completed successfully, 29 total actions$find . -name "*.gcno"
# 寻找不到任何东西

尝试了各种办法,看了各种文档教程,无论是折腾参数还是修改.bazelrc文件,都无法生成gcno文件。
当然,gcda也查不到。

排查

在保存构建产物的过程中,进行了将产物重定向到build目录的操作,此时在build下查找gcda,竟然找到了。

$find -name '*.gcda'
./external/gtest/_objs/gtest/gmock-internal-utils.pic.gcda
./external/gtest/_objs/gtest/gmock-cardinalities.pic.gcda
./external/gtest/_objs/gtest/gtest-typed-test.pic.gcda
./external/gtest/_objs/gtest/gtest-matchers.pic.gcda
./external/gtest/_objs/gtest/gtest-filepath.pic.gcda
./external/gtest/_objs/gtest/gtest-assertion-result.pic.gcda
./external/gtest/_objs/gtest/gtest-printers.pic.gcda
./external/gtest/_objs/gtest/gmock-matchers.pic.gcda
./external/gtest/_objs/gtest/gtest-port.pic.gcda
./external/gtest/_objs/gtest/gtest-death-test.pic.gcda
./external/gtest/_objs/gtest/gmock-spec-builders.pic.gcda
./external/gtest/_objs/gtest/gmock.pic.gcda
./external/gtest/_objs/gtest/gtest-test-part.pic.gcda
./external/gtest/_objs/gtest/gtest.pic.gcda
./external/gtest/_objs/gtest_main/gmock_main.pic.gcda
./main/_objs/hello_test/hello_test.pic.gcda

结合bazel文档提到,它的产物是以符号连接的形式生成在工作区(WORDKSPACE)中的。
到项目根目录查看内容:

$ls -l
total 172
lrwxrwxrwx 1 jiaomian.wjw users    128 Jun  5 20:12 bazel-bin -> /apsara/jiaomian.wjw/.cache/bazel/_bazel_jiaomian.wjw/85047200f6c215149976ede38a6439b5/execroot/_main/bazel-out/k8-fastbuild/bin
lrwxrwxrwx 1 jiaomian.wjw users    111 Jun  5 20:12 bazel-out -> /apsara/jiaomian.wjw/.cache/bazel/_bazel_jiaomian.wjw/85047200f6c215149976ede38a6439b5/execroot/_main/bazel-out
lrwxrwxrwx 1 jiaomian.wjw users    101 Jun  5 20:12 bazel-stage-test -> /apsara/jiaomian.wjw/.cache/bazel/_bazel_jiaomian.wjw/85047200f6c215149976ede38a6439b5/execroot/_main
lrwxrwxrwx 1 jiaomian.wjw users    133 Jun  5 20:12 bazel-testlogs -> /apsara/jiaomian.wjw/.cache/bazel/_bazel_jiaomian.wjw/85047200f6c215149976ede38a6439b5/execroot/_main/bazel-out/k8-fastbuild/testlogs
drwxr-xr-x 2 jiaomian.wjw users   4096 Jun  5 09:50 main
-rw-r--r-- 1 jiaomian.wjw users    399 Jun  5 19:40 MODULE.bazel
-rw-r--r-- 1 jiaomian.wjw users 145955 Jun  5 20:12 MODULE.bazel.lock
-rw-r--r-- 1 jiaomian.wjw users    188 Jun  5 09:51 WORKSPACE

果然,这几个bazel的产物都是符号连接。
而find指令默认不会进入软连接进行查找。

解决办法

给find增加-L参数即可

$find -L -name '*.gcno'
./bazel-bin/external/gtest/_objs/gtest/gmock.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-printers.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-filepath.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-typed-test.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gmock-spec-builders.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gmock-internal-utils.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-assertion-result.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gmock-matchers.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-test-part.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-matchers.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-death-test.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gmock-cardinalities.pic.gcno
./bazel-bin/external/gtest/_objs/gtest/gtest-port.pic.gcno
./bazel-bin/external/gtest/_objs/gtest_main/gmock_main.pic.gcno
./bazel-bin/main/_objs/hello_test/hello_test.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-printers.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-filepath.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-typed-test.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-spec-builders.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-internal-utils.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-assertion-result.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-matchers.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-test-part.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-matchers.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-death-test.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-cardinalities.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-port.pic.gcno
./bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest_main/gmock_main.pic.gcno
./bazel-out/k8-fastbuild/bin/main/_objs/hello_test/hello_test.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-printers.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-filepath.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-typed-test.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-spec-builders.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-internal-utils.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-assertion-result.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-matchers.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-test-part.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-matchers.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-death-test.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gmock-cardinalities.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest/gtest-port.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/external/gtest/_objs/gtest_main/gmock_main.pic.gcno
./bazel-stage-test/bazel-out/k8-fastbuild/bin/main/_objs/hello_test/hello_test.pic.gcno

看,这不是很多吗:)

这篇关于find 查找 Bazel 构建覆盖率文件的一个☝️坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080565

相关文章

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

基于Spring Boot构建淘客返利平台

基于Spring Boot构建淘客返利平台 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将讨论如何基于Spring Boot构建一个淘客返利平台。 淘客返利平台通过整合各种电商平台的商品信息,提供给用户查询和返利功能,从而实现流量变现。以下是实现一个简单的淘客返利平台的步骤。 1. 项目初始化 首先,使用Spri

使用 AngularJS 从零构建大型应用

0、导言1、准备工作2、构建框架3、丰富你的directives4、公用的services5、用controllers组织业务 导言 纵览线上各种AngularJS教程,大部分都是基础与一些技巧分析。 如果你已经能运行你的ng-app,但又找不到实际案例可以参考。那么本文应该对您有所帮助。 本文将以电商产品:友好速搭 其中的 店铺后台 作为的实际案例,裸奔展示如何从零构建“自以为大型的”A

指令微调数据集构建方法

指令微调(Instruction Tuning),是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,在一些文章中也称为有监督微调(Supervised Fine-tuning,SFT)或多任务提示训练(Multitask Prompted Training)。指令微调的第一步就是收集或构建指令化的实例,然后通过有监督的方式对LLM的参数进行微调,经过指令微调后,大语言模型能够展现出较强

使用J-Link Commander查找STM32死机问题

接口:PA13,PA14,请勿连接复位引脚。 输入usb命令 这里我已经连接过了STM32F407VET6了。 再输入connect命令 这里我已经默认选择了SWD接口,4000K速率。 可以输入speed 4000命令选择4000K速率: 写一段崩溃代码进行测试: void CashCode(void){*((volatile uint32_t*) 0x080FFFFF)

构建高可用Java微服务架构的秘籍

构建高可用Java微服务架构的秘籍 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 随着云计算和分布式系统的快速发展,微服务架构已成为构建大型应用的首选方案之一。而在构建高可用的Java微服务架构时,开发者需要考虑诸多因素,包括服务发现、负载均衡、容错机制等。本文将分享一些构建高可用Java微服务架构的秘籍,帮助开发者更好地设

二分查找(算法篇)

算法之二分查找 二分查找 概念: 针对于已经预先排序好的数据,每次将数据进行对半查找,然后看它中间的数据是否是要找的,如果是就返回中间位置,不是就判断该数据是在前半部分还是后半部,然后在进而取其中部,看其是否找到,然后如果还没找到就一直重复操作,直到找到为止,该算法时间复杂度为O(logn) 代码: int search(vector<int>& nums, int target) {i

昇思25天学习打卡营第5天|网络构建

一、简介: 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类(这个类和pytorch中的modul类是一样的作用),也是网络的基本单元。一个神经网络模型表示为一个Cell,它由不同的子Cell构成。使用这样的嵌套结构,可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。