#protobuf #protoc #tool #steroids #output #

bin+lib decode_raw

A protobuf调试工具 – 加强版的protoc --decode_raw

5个版本

0.2.0 2022年2月16日
0.1.3 2022年2月11日
0.1.2 2022年1月31日
0.1.1 2022年1月31日
0.1.0 2022年1月31日

#2340 in 编码

Apache-2.0GPL-3.0-only

25KB
553

decode_raw

A protobuf调试工具 – 加强版的protoc --decode_raw

亮点

美观的输出

Overview image

支持小数据和大数据

默认截断大二进制数据。长度始终可见。您可以使用 --full 来显示完整数据。结合消息选择(见下文),您可以首先获得概览,然后获取特定字段的完整数据。

data image

漂亮的转义JSON内容

字符串内容可以直接粘贴到类似 echo '{"my": "json"}' | jq 的工具中。

json image

选择子消息

使用类似jq的语法仅选择子消息。

select image

高级类型检测

工具基于最佳猜测在嵌套protobuf消息、字符串和原始字节之间进行判断。有时它可能错误,但您可以提供帮助。例如,如果您知道没有使用固定长度类型,请添加 --no-fixed 以获得正确的输出。

no-fixed image

安装

从crates.io安装

cargo install decode_raw

根据您的系统上的cargo配置,您应该在 $HOME/.cargo/bin$CARGO_HOME/bin 中找到二进制文件。将此文件夹添加到您的 $PATH 中很方便。

更新到最新版本

您可以使用 decode_raw --version 检查已安装的版本,并更新。

cargo install --force decode_raw

基本用法

decode_raw 从 STDIN 读取序列化的 protobuf 并打印。

从管道

$ echo 08bf99bfb4e502120a4a616e6520536d697468 | xxd -r -p | decode_raw
1: 95941545151
2: (10 bytes) 'Jane Smith'

从文件

decode_raw < docs/person.bin
1: 1021211
2: (8 bytes) 'John Doe'
3 {
· 1: 959435311
· 2: (11 bytes) 'Susanne Doe'
}
3 {
· 1: 81154811
· 2: (9 bytes) 'Mac Smith'
· 3 {
· · 1: 95941545151
· · 2: (10 bytes) 'Jane Smith'
· }
}

目标与非目标

decode_raw 应该

  • 使 Simon 在调试 protobuf 时感到满意
  • 对于 protoc --decode_raw 的用户来说,启动非常简单
  • 支持 proto3

它无意

  • 为脚本提供稳定的输出
  • 成为性能赢家
  • 帮助修复 protobuf 序列化。这些将被视为原始的应用层字节。
  • 支持 proto2

许可证

Apache 2.0,请参阅 LICENSENOTICE

依赖关系

~6.5MB
~114K SLoC