Re: Could GDB get offset of a field in virtual base class through NULL pointer

hex <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAB_AMN5ngrKWwwVwUBFQ1wS5fLiDCyDRO+qe9bOjPBJAMo-05Q@mail.gmail.com>
>> GDB could print &(((B *)0)->a), but it could not print &(((B *)0)->a).
>                   ^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^
> Those two expressions are the same and they really od not work:
>
> (gdb) p &(((B *)0)->a)
> Cannot access memory at address 0x0
>

Sorry, a mistake, I meant "GDB could print &(((B *)0)->b), but it could not
print &(((B *)0)->a)."

> I do not see what it should do.  In the following case &(((B *)&OBJECT)->a)
> prints once 12 and once 16 for different OBJECT so what it should print for 0?
>
> class X:public virtual A,public B {};
> class C {
> public:
>         int c;
> };
> class Y:public virtual A,public C,public B {};
> #include <iostream>
> int main() {
>         X x;
>         Y y;
>         std::cout << (char *)&(((B *)&x)->a)-(char *)&x << std::endl;
>         std::cout << (char *)&(((B *)&y)->a)-(char *)&y << std::endl;
> }
>

If we use &(((B *)0)->a), we are likely to get offset of 'a' in class
B. If GDB could
support this specific case, we do not need a real object to get the offset.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.