Re: Robustifying pretty-printers

Vladimir Prus
2009-07-09T17:20:03Z

On Wednesday 08 July 2009 Tom Tromey wrote:

> >>>>> "Vladimir" == Vladimir Prus <vladimir@codesourcery.com> writes:
>
> Vladimir> Exactly, they only limited the number of children sent to
> Vladimir> frontend. If we go this route, I think it is better to make
> Vladimir> -var-list-children take a couple of parameters to specify
> Vladimir> the desired range, with [0, whatever] as default -- as
> Vladimir> opposed to the previous approach where this limit should be
> Vladimir> set on varobj, not on individual -var-list-children call.
>
> Just to be clear, do you also want these options on -var-update?
> Or should it remember the previous values passed via -var-list-children?

I think the most reasonable behavour is to remember the number of fetched
children. So, if frontend decided to fetch 20 children once, -var-update should
not silently check only 10 of them on. I also think it's best for varobj to
remember the number of children requested by frontend, not actually reported.
So, if you had 15 children, and fronend first did:

-var-list-children v 0 10

and then, maybe in response to user action, did:

-var-list-children 10 20

and go 5 new children, and then more children are added, then -var-update
will report all existing children between 0 and 20, as opposed to showing
just 15.

There's also a question how frontend will know that there are more children --
so that it can show "..." in the tree view, or something. The best approach would
be for GDB to fetch one children more, and then use emit 'has-more' field in
-var-list-children output. The other alternative is for frontend to fetch one more
item than it wishes to display -- but such a logic has to be repeated for each
frontend. Anyway, this aspect seems independent from others, so I can do it
myself after you are done with the code changes.

We probably need a way to explicitly reset the 'remembemered' limit on elements,
so that frontend is not forced to display 20 elements forever.

- Volodya