如何阅读Bazels二进制构建事件协议文件?

时间:2018-06-13 20:45:40

标签: c++ protocol-buffers bazel

我想用Bazel(基于Bazel的构建)实现编译器警告的获取。我知道有些文件已经可以用于此了。这些文件位于:

  

$ PROJECT_ROOT /巴泽勒输出/ _TMP / action_outs /

并命名为stderr-XY。

Bazel能够将所有构建事件保存在指定文件中。请注意,目前(Bazel 0.14)该指定文件有3种支持的格式,它们是:文本文件,JSON文件和二进制文件。此问题与 only to binary file 相关。

如果我已正确理解Google's protocol buffers,那么它们的实施和工作的工作流程是:

  1. 通过在.proto文件中定义协议缓冲区消息类型,指定您希望如何构建序列化信息。
  2. 一旦定义了消息,就可以在.proto文件上为应用程序的语言运行协议缓冲区编译器(protoc),以生成数据访问类。
  3. 在项目中包含生成的文件,并在代码中使用生成的类。通过使用它意味着填充,序列化和检索协议缓冲消息(即对于C ++,我使用它的编程语言可以使用 SerializeToOstream ParseFromIstream 方法这样的任务)
  4. 结束这个问题:

      

    如上所述here:   “让Bazel通过指定选项--build_event_binary_file = / path / to / file将协议缓冲区消息序列化为文件。该文件将包含序列化协议缓冲区消息,每条消息都以长度分隔。”

    我没有看到避免开发人员想要使用Bazel的功能在二进制文件中编写构建事件这一事实的方法,需要知道“格式”或更简洁地说类架构来读取二进制文件文件。我在这里错过了什么吗?所有这些都可以完成吗?

    另外,我尝试使用protoc --decode_raw < bazelbepbinary.bin并说:

      

    无法解析输入。

    所有这些都是在Ubuntu 16.04上完成的,目前我不确定什么是GCC版本,但是当我必须访问该信息时,我会在问题中添加GCC版本。

    我的问题是:是否有可能只捕获那些反映构建警告的构建事件(不使用某种过滤器,例如grep生成的文件?)我已阅读文档并使用:

    bazel help build --long | grep "relevant_build_event_protocol_keywords"

    并且无法在API中找到类似的内容。

0 个答案:

没有答案