From gdb Fri Apr 15 03:09:29 2016 From: Yichao Yu Date: Fri, 15 Apr 2016 03:09:29 +0000 To: gdb Subject: Re: Casting an object to another type while debugging? Message-Id: X-MARC-Message: https://marc.info/?l=gdb&m=149901967461503 On Thu, Apr 14, 2016 at 11:02 PM, Thomas Nyberg 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 } > (gdb) print name > $12 = (PyObject *) 0x7ffff7ee3298 > (gdb) print *name > $13 = {ob_refcnt = 2, ob_type = 0x8a1a00 } > (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