Perhaps I'm dense, but what's the problem? That gdb doesn't print the
exact type info that you expected? That could well be the difference
between -O2 and -O0...

On Mon, Aug 19, 2013 at 9:55 AM, Alvaro Aguilera
<[email protected]> wrote:
> Hello,
>
> I'm having a strange problem when setting an string value in a protocol
> buffer. Keep in mind that my experience in C++ and PB is rather limited.
> The .proto file looks more or less like this:
>
> ----------------------
> package buffers;
>
> message AttributeValue {
>
>     enum Type {
>         INT64   = 0;
>         UINT64  = 1;
>         INT32   = 2;
>         UINT32  = 3;
>         FLOAT   = 4;
>         DOUBLE  = 5;
>         INVALID = 6;
>         STRING  = 7;
>     }
>
>     required   Type type = 1;
>     optional   int32 i32 = 2;
>     optional   int64 i64 = 3;
>     optional uint32 ui32 = 4;
>     optional uint64 ui64 = 5;
>     optional     float f = 6;
>     optional    double d = 7;
>     optional  string str = 8;
>
> }
>
> ----------------------
>
> I also have a function to convert a class "VariableDatatype" into an
> AttributeValue buffer. It looks like this:
>
> void BufferConverter::attribute_value(const VariableDatatype &s_atv,
> buffers::AttributeValue &b_atv)
> {
>     switch(s_atv.type()) {
>     case VariableDatatype::Type::STRING:
>         b_atv.set_type(buffers::AttributeValue::STRING);
>         b_atv.set_str(s_atv.str());
>         break;
>     }
> }
>
>
> In the main function I try to create a protocol buffer containing the string
> stored in VariableDatatype by using the attribute_value() function in the
> way shown below:
>
> main-1()
> {
>     buffers::AttributeValue *bs = new buffers::AttributeValue();
>     c.attribute_value(ds, *bs);
>
> }
>
> This doesn't work.
> If I print the value of b_atv inside the attribute_value function using gdb
> I get something like:
>
> gdb print b_atv
> 26 = (buffers::AttributeValue &) @0x6496b0: {<google::protobuf::Message> =
> {<google::protobuf::MessageLite> = {
>
>
> However, when I print *bs from inside main-1, I get something different:
>
> gdb print *bs
> $36 = {<google::protobuf::Message> = {<google::protobuf::MessageLite> =
> {_vptr.MessageLite = 0x642650 <vtable for buffers::AttributeValue+16>
>
> I can work around the problem by using the following main-2:
>
> main-2()
> {
>     buffers::AttributeValue *bs = new buffers::AttributeValue();
>     buffers::AttributeValue &bss = *bs;
>
>     c.attribute_value(ds, bss);
> }
>
> but that's not very elegant. Can someone point me to the right way to handle
> this?
>
> Thank you
> A.
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to