故障排除
本页涵盖 Apache Fory™ Rust 的常见问题和调试技术。
常见问题
类型注册表错误
错误:TypeId ... not found in type_info registry
原因:该类型从未在当前 Fory 实例中注册。
解决方案:在序列化之前注册类型:
let mut fory = Fory::default();
fory.register::<MyStruct>(100)?; // 使用前注册
确认:
- 每个可序列化的结构体或 trait 实现都调用
fory.register::<T>(type_id) - 在反序列化端重用相同的 ID
类型不匹配错误
原因:字段类型不兼容或 schema 已更改。
解决方案:
- 启用 compatible 模式以支持 schema 演化
- 确保跨版本字段类型匹配
let fory = Fory::default().compatible(true);
调试技术
启用错误时 Panic 以获取回溯
在 RUST_BACKTRACE=1 旁边切换 FORY_PANIC_ON_ERROR=1,在构造错误的确切位置 panic:
RUST_BACKTRACE=1 FORY_PANIC_ON_ERROR=1 cargo test --features tests
之后重置该变量以避免中止面向用户的代码路径。
结构体字段跟踪
在 #[derive(ForyObject)] 旁边添加 #[fory(debug)] 属性以发出钩子调用:
#[derive(ForyObject)]
#[fory(debug)]
struct MyStruct {
field1: i32,
field2: String,
}
使用调试钩子编译后,调用这些函数以插入自定义回调:
set_before_write_field_funcset_after_write_field_funcset_before_read_field_funcset_after_read_field_func
当你想要恢复默认值时,使用 reset_struct_debug_hooks()。