【发布时间】:2020-08-04 18:30:20
【问题描述】:
我是一个新手,试图将 google protobuf 用于工作项目。我想找出 protobuf 消息之间的区别,因此尝试使用 MessageDifferencer API。我在运行下面的代码时得到了 SEGV。注释行“reporter->ReportModified(*Obj1, *Obj2, field_path);”结果没有segv 任何有关使用差异的帮助表示赞赏!
google::protobuf::util::MessageDifferencer diff;
diff.set_report_matches(false);
diff.set_report_moves(false);
std::string reportDiff;
google::protobuf::io::StringOutputStream* opstream = new google::protobuf::io::StringOutputStream(&reportDiff);
google::protobuf::util::MessageDifferencer::StreamReporter* reporter = new google::protobuf::util::MessageDifferencer::StreamReporter(opstream);
diff.ReportDifferencesTo(reporter);
std::vector<google::protobuf::util::MessageDifferencer::SpecificField> field_path;
try
{
reporter->ReportModified(*Obj1, *Obj2, field_path);
}
catch (const std::exception& e)
{
std::cout << e.what() <<"\n";
}
cout << __func__ << " Report added " << field_path.size();
//Cleanup objects
delete Obj1;
delete Obj2;
delete reporter;
谢谢, 麦迪
【问题讨论】:
-
恐怕这个问题还不够继续。理想情况下,您将提供一个最小的、可重现的示例 - 允许重现问题的东西 (stackoverflow.com/help/minimal-reproducible-example)。例如,这里最重要的方面之一是
Obj1和Obj2的来源。如果您可以获得崩溃的堆栈跟踪信息,也将非常有用。 -
谢谢!下次会记住这一点!
标签: protocol-buffers protobuf-c