ProtocolBuffer,SerializeToArray()上的abort()

干ries

我从通常使用的原型类中创建了一个ProtocolBuffer对象,并且需要对其进行序列化。现在,我将对象取出,并像下面这样调用SerializeToArray():

int size = messageObject.ByteSize();
void* buffer = malloc(size);
messageObject.SerializeToArray(buffer, size);

据我所知,这没有问题,因为对象中有数据(我通过在Serialize行之前中断来检查它)。

但是,当该方法调用时,它会触发abort(),我对此一无所知。我不知道那会是什么。此对象中唯一包含的数据是“类型”枚举器(我可以将其设置为此对象中使用的数据类型,因为它可以包含不同种类的消息),并且它包含一个可重复的消息对象类型。

message MessageID 
{
    enum Type { LOGINDATA = 1; PLAYERDATA = 2; WORLDDATA = 3; }

    // Identifies which field is filled in.
    required Type type = 1;

    // One of the following will be filled in.
    repeated PlayerData playerData = 2;
    optional WorldData worldData = 3;
    optional LoginData loginData = 10;
}

这是基本消息。因此,在这种情况下,Type为2,代表PLAYERDATA。另外,将用单个类型为PlayerData的对象设置playerData。

感谢您的帮助。

肯顿·瓦尔达(Kenton Varda)

每当protobuf库中止时(再次应该仅在调试模式下或在严重情况下),它将把有关问题的信息输出到控制台。如果您的应用程序没有控制台,则可以用于google::protobuf::SetLogHandler将信息定向到其他位置:

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.common#SetLogHandler.details

typedef void LogHandler(LogLevel level, const char* filename,
                        int line, const std::string& message);
LogHandler* SetLogHandler(LogHandler* new_func);

protobuf库有时会将警告和错误消息写入stderr。

这些消息主要对开发人员有用,但也可以帮助最终用户解决问题。如果您希望将这些消息发送到stderr以外的其他地方,请调用SetLogHandler()来设置您自己的处理程序。这将返回旧的处理程序。将处理程序设置为NULL可忽略日志消息(但另请参见下面的LogSilencer)。

显然,SetLogHandler不是线程安全的。您应该只在初始化时调用它,而可能不能从库代码中调用它。如果您只是想暂时抑制日志消息(例如,由于您的某些代码往往会频繁触发它们,并且您知道警告对您而言并不重要),请使用下面的LogSilencer类。

我知道中止的唯一原因(仅适用于调试版本)是未设置某些必填字段。您说该type字段已设置,因此必须有一个PlayerData未设置的必填字段

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery.abort()在keyup事件上

来自分类Dev

如何取消 Thread.Abort() 上的任务

来自分类Dev

在MacOS Catalina上使用Cro时,Raku为什么会因“ Abort trap:6”而崩溃?

来自分类Dev

将处置一个在其方法上启动了线程的对象时,无需调用Thread.Abort()

来自分类Dev

为什么编译器在使用 ?? 时会报错(abort trap: 6)字典上的运算符

来自分类Dev

协议缓冲区SerializeToArray:如何查找已序列化的结构

来自分类Dev

启动线程导致abort()

来自分类Dev

撤消git am --abort

来自分类Dev

abort()不更改标题

来自分类Dev

每当我在Mac上键入pip install时,都会出现此错误:fish:'pip install tweepy'被信号SIGABRT(Abort)终止

来自分类Dev

jqXHR.abort不是函数

来自分类Dev

abort()无限期挂起

来自分类Dev

PHP退出页面ajax abort()

来自分类Dev

Abort Git在PhpStorm中合并

来自分类Dev

Laravel abort()与return response()-> json()

来自分类Dev

Thread.Abort()方法冻结

来自分类Dev

是否可以从std :: abort中恢复?

来自分类Dev

Flask middleware on abort 401 causing a 500

来自分类Dev

调试错误-Abort()已被调用

来自分类Dev

XACT_ABORT的范围是什么

来自分类Dev

raise(SIGABRT)和abort()方法之间的区别

来自分类Dev

exit和abort有什么区别?

来自分类Dev

后台代理-Abort()和NotifyComplete()之间的区别

来自分类Dev

R6010 abort()已被调用

来自分类Dev

多久ignore_user_abort(true); 坚持?

来自分类Dev

是否可以从std :: abort中恢复?

来自分类Dev

Ruby线程池abort_on_exception

来自分类Dev

SAS:如何防止发生错误的ABORT

来自分类Dev

Rapidjson + C++:“abort() 已被调用”错误

Related 相关文章

热门标签

归档