GRPC问题合集

问题1:

写好了proto文件并生成对应的c++文件后,c++文件会编译失败,报很多这些c++文件看不懂的问题

原因:proto文件里有中文注释,如

//创建者
service....

这句话会被带入到c++中,但是VS并没有按照utf-8去编译源码,导致中文被解析成其他字符串,个人认为成了这种:

 //\usc3564c//ds5

service....

 那么代码中就有了乱码。【网上说是中文把换行符吞掉了,导致代码丢失,可以搜:VS中文注释报错】

解决:右键项目,C/C++,所有选项,附加选项,里面添加:

/utf-8

 如果还出现问题,把proto文件里的中文注释规范一下或者直接都去掉 

 

问题2:慎用set_allocate_xxx函数

如果一个类里面有另一个类,然后想设置这个类的时候,如:

Proto文件:
message Cmd
{

}

message A
{
Cmd c =1;
}
C++:
A a;
{
    Cmd c;
    a.set_allocated_cmd(c);
}
//use a in rpc,core down

这里的set_allocated_cmd是把c的地址复制给a里的c,但是这里的c是临时变量,故离开作用域后指针无效,后续调用接口的时候,c肯定是空指针,所以会直接core down。

这问题非常不容易定位到,因为set_allocated的时候是没有异常的,只有在调用接口的时候会异常。。。需要非常注意。参考:https://blog.csdn.net/xiaxiazls/article/details/50118161

正确用法:

Proto文件:
message Cmd
{

}

message A
{
Cmd c =1;
}
C++:
A a;
{
    Cmd c;
    a.mutable_cmd()->CopyFrom(c);
}

 

posted @ 2021-11-03 19:55  朱小勇  阅读(408)  评论(0编辑  收藏  举报