This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Python Pretty printing a struct


On 13/03/2010 7:40 AM, Tom Tromey wrote:
"Chris" == Chris Johns<chris@contemporary.net.au> writes:

Chris> (gdb) p the_semaphore->Object.id Chris> $36 = to_string = { Chris> id = 436273170, [...] Chris> How do I remove the extra "to_string =" ?

Presumably your printer returns it.

Yes.


Could you post the python code?

class object_id_printer: """Print an object given the ID. Print using the struct display hint and an iterator."""

    class object_id_iterator:
        """Use an iterator for each field expanded from the id so GDB
        output is formatted correctly."""

        def __init__(self, id):
            self.id = id
            self.count = 0

        def __iter__(self):
            return self

        def next(self):
            self.count += 1
            if self.count == 1:
                return int(self.id.value())
            elif self.count == 2:
                return self.id.node()
            elif self.count == 3:
                return self.id.api()
            elif self.count == 4:
                return self.id._class()
            elif self.count == 5:
                return self.id.index()
            raise StopIteration

    def __init__(self, id):
        self.id = rtems_object_id(id)

    def to_string(self):
        return 'to_string'

    @staticmethod
    def key(i):
        if i == 0:
            return 'id'
        elif i == 1:
            return 'node'
        elif i == 2:
            return 'api'
        elif i == 3:
            return 'class'
        elif i == 4:
            return 'index'
        return 'bad'

    def children(self):
        counter = itertools.imap (self.key, itertools.count())
        return itertools.izip (counter,
                               self.object_id_iterator(self.id))

    def display_hint (self):
        return 'struct'

Chris>  I have also noticed this:
Chris>  (gdb) p /x the_semaphore->Object.id
Chris>  $37 = 0x1a010012
Chris>  Is it expected the actual value is shown in hex rather than the
Chris>  numeric fields returned by the pretty print iterator ?

It might be a bug, I am not sure.


Should I raise a bug report ?


I have also found:

(gdb) p (Object_Id) 0x1a010012

does not invoke the Object_Id pretty printer. In this RTEMS target Object_Id is a typedef to uint32_t which is a typedef to "unsigned long" so GDB looks for a the "unsigned long" pretty printer rather that an Object_Id one.

Chris


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]