Summary: | print displays wrong value of char-pointer in a class, delivered as function parameter | ||
---|---|---|---|
Product: | gdb | Reporter: | cmayer |
Component: | c++ | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED DUPLICATE | ||
Severity: | normal | CC: | gdb-prs, tromey |
Priority: | P3 | ||
Version: | 6.8 | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Attachments: | gdb_bug.tar.gz |
Description
cmayer
2008-08-18 19:38:01 UTC
I can use a trick to see the string: (gdb) p ((char **) ¶m)[1] $2 = 0x8048936 "TestValue" gdb appears to be printing the "zeroth slot" of the object rather than the first. This in turns appears to be a debug info problem, afaict: <1><33f4>: Abbrev Number: 79 (DW_TAG_class_type) <33f5> DW_AT_name : (indirect string, offset: 0x19b8): myclass <33f9> DW_AT_byte_size : 4 <33fa> DW_AT_decl_file : 29 <33fb> DW_AT_decl_line : 9 <33fc> DW_AT_sibling : <0x343e> <2><3400>: Abbrev Number: 80 (DW_TAG_member) <3401> DW_AT_name : str <3405> DW_AT_decl_file : 29 <3406> DW_AT_decl_line : 11 <3407> DW_AT_type : <0xaef> <340b> DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0) It seems to me that the data member location should not be 0. However, I am not certain; I'll have to do more reading. This diagnosis is wrong -- I'm not sure what I was thinking here, since this class doesn't have a vtable. So, the string should appear at offset 0. This could be bad debug info elsewhere. Or an undiagnosed bug in gdb. |