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: Inconsistency between results of pretty-printing children


On 20.07.2012 12:05, Oliver Buchtala wrote:
Hi,

I am facing a problem with the python API for implemenation of Printer.children().

In working examples the metod of a pretty printer looks like that:

   def children():
      return [("key", 1)]

Usually one returns an iterable here.

The point is, that it returns tuples with key and value.
This works fine with existing IDEs using the MI interface (kdevelop, eclipse cdt, nemiver).


In the API documentation it is described, that this method should return alternating keys and values.
And that is exactly what is expected by gdb's print command when printing pretty.
To work with gdb's print method, I would adapt my printer to flatten the whole list so that keys and values are iterated in an alternating manner.


This way it happens, that my pretty printer can not be used in IDEs and with gdb's print simultanously.
Am I doing something wrong?


Regards,
Oliver


I have created an iterator that would show the correct result in gdb's print for a children method return (key,value) tuples:


class AlternateKeyValueIterator():

  def __init__(self, iterable):
    self.it = iterable.__iter__()
    self._next = None

  def __iter__(self):
    return self

  def next(self):
    if self._next == None:
      key, value = self.it.next()
      self._next = value
      return ("", key)
    else:
      value = self._next
      self._next = None
      return ("", value)

It needs also to return tuples of (str, gdb.Value) but only the value is used for printing, where as this value must be set to key and value in an alternating manner.

Any hints?
Or is it a bug?

Regards,
Oliver


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