[PATCH] Speed up "gdb -tui" output

Pedro Alves palves@redhat.com
Wed Jan 7 15:18:00 GMT 2015


On 01/06/2015 06:37 PM, Doug Evans wrote:

> Having written all that, asking the caller to know to do
> wrefresh at the needed times could be onerous.
> One thing that occurs to me is that gdb does do things like:
> 
> Reading symbols from foo ... (work work work) done.
> And if I do that on my standard monster benchmark (fortunately
> I keep a ready-to-use copy lying around for experiments like this :-))
> I see a long pause before "done." is printed.
> 
> And lo and behold, if I apply your patch I see this:
> 
> bash$ gdb -tui
> (gdb) file foo<ret>
> 
> At this point I've hit return but I don't see anything printed.
> 
> pause pause pause
> 
> and then finally I see all the output:
> 
> Reading symbols from foo...done.
> mumble ...
> (gdb)

Since stdout is line buffered by default (on Unix), if this is
working when the TUI is disabled, then it must be because there's
explicit gdb_flush(gdb_stdout) after "Reading symbols from foo..."
is printed, right?

Isn't the issue then that the TUI's implementation of
gdb_flush (tui/tui-file.c) should be doing whatever it
needs to flush the output?  Should it be calling wrefresh
if the file is gdb_stdout?  If we do that, and change tui_puts like:

 -  /* We could defer the following.  */
 -  wrefresh (w);
 -  fflush (stdout);
 +   if (c == '\n')
 +    gdb_flush (gdb_stdout);

would it work?

Thanks,
Pedro Alves



More information about the Gdb-patches mailing list