gpt4 book ai didi

c++ - protobuf 中的错误处理

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:44 27 4
gpt4 key购买 nike

我是 protobuf (C++) 的新手,尝试用 protobuf 编写第一个测试程序。代码是

#include <cstdlib>
#include <iostream>
#include "proto/req.pb.h"

using namespace std;
using namespace google::protobuf;

int main(int argc, char** argv) {
std::string s = "asdfasdf";

auto MyLogHandler = [] (google::protobuf::LogLevel level, const char* filename, int line, const std::string& message)
{
std::cout << "message " << message << std::endl;
};
google::protobuf::SetLogHandler(MyLogHandler);

Request req;
if ( req.ParseFromString(s)){
cout << "Parse - OK" << endl;
}else{
cout << "Parse - ERROR" << endl;
}
return 0;
}

程序运行时 - 它只显示错误消息,但不显示任何原因。我怎样才能找到错误的原因?

最佳答案

Protobuf 解析失败的原因有两个:

  • 输入数据缺少必填字段。在这种情况下,Protobuf 库会写入一条描述问题的日志消息,然后返回 false。在这种情况下,您的日志处理程序将收到错误消息。

  • 输入数据不是有效的 Protobuf(它已损坏,或者根本就不是 protobuf)。在这种情况下,Protobuf 库只返回 false 而没有任何错误消息。图书馆真的没有在这里可以提供的有用信息。如果您遇到这种情况,最好的调试方法是在序列化消息之后和解析消息之前立即转储准确的字节,然后查找差异。

关于c++ - protobuf 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28498302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com