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); }
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html