调试

调试 Protocol Buffers 中的常见问题。

Protobuf 用户遇到的常见问题和调试场景。

Bazel:解决预构建 Protoc 的问题

正如这篇新闻文章中所述,Bazel 7 及更高版本支持使用预构建 protoc 的构建。当一切配置正确时,这可以节省大量构建时间,减少日志量,并消除在非 C++ 实现中对 C++ 工具链的需求。

为防止从源代码编译 protoc,请将以下内容添加到您的 .bazelrc 文件中

common --per_file_copt=external/.*protobuf.*@--PROTOBUF_WAS_NOT_SUPPOSED_TO_BE_BUILT
common --host_per_file_copt=external/.*protobuf.*@--PROTOBUF_WAS_NOT_SUPPOSED_TO_BE_BUILT
common --per_file_copt=external/.*grpc.*@--GRPC_WAS_NOT_SUPPOSED_TO_BE_BUILT
common --host_per_file_copt=external/.*grpc.*@--GRPC_WAS_NOT_SUPPOSED_TO_BE_BUILT

当依赖图中存在对 @com_google_protobuf//:protoc 的硬编码引用时,protoc 将强制为这些情况进行构建,从而抵消这一好处。要解决此问题,您需要找到依赖项的位置,并请求更新这些规则集。

要查找您依赖 protoc 的位置,请使用以下命令

bazel cquery 'somepath("//...", "@com_google_protobuf//:all")'

注意:预构建版本仅适用于我们的标准平台集。任何非标准平台的用户都必须从源代码构建 protoc。