Re: Casting an object to another type while debugging?

Yichao Yu <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAMvDr+T9bEOn5D01FFpkr0v5EGXy9ys2KUwmbBVdunL1g9hL-g@mail.gmail.com>
On Thu, Apr 14, 2016 at 11:02 PM, Thomas Nyberg <[email protected]> wrote:
> Hello,
>
> Please yell and scream if I'm posting this to the wrong list (and then
> point me in the right direction :) ).
>
> To make my situation specific, I'm stepping through the cpython
> implementation of the python interpreter using gdb. The implementation
> tends to pass around all objects as type (PyObject *). I know that a
> certain object can be cast to (PyUnicode_Type *) and so I've tried to do
> this to print out the structure, but without success. Here are some
> examples:
>
> ```
> (gdb) print name
> $10 = (PyObject *) 0x7ffff7ee3298
> (gdb) print *name
> $11 = {ob_refcnt = 2, ob_type = 0x8a1a00 <PyUnicode_Type>}
> (gdb) print name
> $12 = (PyObject *) 0x7ffff7ee3298
> (gdb) print *name
> $13 = {ob_refcnt = 2, ob_type = 0x8a1a00 <PyUnicode_Type>}
> (gdb) print (void *) name
> $14 = (void *) 0x7ffff7ee3298
> (gdb) print * (void *) name
> Attempt to dereference a generic pointer.
> (gdb) print * (PyUnicode_Type *) name
> A syntax error in expression, near `) name'.
> (gdb) print * (PyUnicode_Typ *) name
> No symbol "PyUnicode_Typ" in current context.
> (gdb) print (PyUnicode_Type *) name
> A syntax error in expression, near `) name'.
> (gdb) print ((PyUnicode_Type *) name)
> A syntax error in expression, near `) name)'.
> (gdb) print ((PyUnicode_Type *) name);
> A syntax error in expression, near `) name);'.

PyUnicode_Type is not the name of the C type it's a variable/address
that's holding the python type/vtable. I believe PyUnicodObject is the
C type name.


> ```
>
> So from this it seems to me like it's recognizing the PyUnicode_Type
> fine, but I just get this weird syntax error. My google-foo hasn't
> worked out that well so far in resolving this. What am I doing wrong? Am
> I misunderstanding how casting works?
>
> Thanks for any help!
>
> Cheers,
> Thomas
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.