This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Inconsistency between results of pretty-printing children
- From: Oliver Buchtala <oliver dot buchtala at googlemail dot com>
- To: gdb at sourceware dot org
- Date: Fri, 20 Jul 2012 14:42:17 +0200
- Subject: Re: Inconsistency between results of pretty-printing children
- References: <50092D6B.3040103@googlemail.com>
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