[PATCH] Make "list" work again in TUI

Pedro Alves palves@redhat.com
Wed Sep 12 12:20:00 GMT 2018


On 09/09/2018 07:26 PM, Tom Tromey wrote:
>>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
> 
> Tom> This patch makes the "list" command work again by adding some caching.
> Tom> Now the TUI tracks the previously displayed frame, PC, and inferior;
> Tom> and only updates the display if one of these was changed by the
> Tom> previous command.
> 
> I have a question about this one now.
> 
> In the bug the original poster said that to get back to the current
> location, he would use the "frame" command.  This doesn't work with my
> patch, and I'm not sure how it would have worked in the past.

I used to do that too.

> 
> One part of how the TUI links to the CLI is very convoluted -- there is
> a special case in tui-out to notice how the "list" command emits fields
> and newlines and to use that to refresh the window.  I'd rather not do
> anything this roundabout and fragile...

Yeah.

> 
> Other parts of the CLI use #ifdef TUI to decide what action to take when
> the TUI is available.  This seems like an "old school" approach though I
> must say I prefer its directness.  I wouldn't mind rewriting "list" to
> do this.
> 
> Another option might be to have the frame command unconditionally notify
> some observer.  Then the TUI could listen for this.
> 
> Anyway, I'd appreciate comments on which approach CLI/TUI integration
> ought to ideally take.  I don't know the history here and there aren't
> guiding comments that I could find.

I'm under the impression that the TUI was added along with the
major HP dump/merge back in the day, meaning original design history
is probably lost.  I may be wrong.

Offhand, it seems to me that the TUI should update its listed source
whenever the CLI's current source changes.  I.e., the TUI's source
window should be updated whenever set_current_source_symtab_and_line is
used to update the current source & line for the CLI's "list".  Which
suggests that for "frame" TUI re-centering, an observer notification from
within set_current_source_symtab_and_line would work.

If we always updated the source window from a TUI observer for
that notification, could we make tui_refresh_frame_and_register_information
just never update the source window?  I.e., remove the select_source_symtab
call from tui_refresh_frame_and_register_information or something along
those lines.  That assumes that if the frame changed, then presumably,
set_current_source_symtab_and_line will have already been called, which
it seems is true.  (if it isn't, then "list" won't be updated either, and
we're back to the argument about keeping "list" and the TUI in sync.).
That would eliminate the need for the caching.

Thanks,
Pedro Alves



More information about the Gdb-patches mailing list