Re: [PING^2][PATCH][PR gdb/21690] Fix interruption of command history search

Andrew Burgess
2020-06-08T14:41:15Z

* Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> [2020-06-08 11:51:07 +0000]:

> Ping.
>
> Am Freitag, 15. Mai 2020, 11:00:41 MESZ hat Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> Folgendes geschrieben:
>
> > Am Samstag, 25. April 2020, 19:17:34 MESZ hat Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> Folgendes geschrieben:
> >
> > Ping.
> >
> > > If you press Ctrl-C during an incremental search of the readline history, the
> > > prompt is reset, but readline is still in the incremental search mode.
> > >
> > > The call of rl_callback_sigcleanup cleans up the internal readline state, and
> > > disables the incremental search mode.

I didn't look into the implementation of this, but something seems a
little odd, though I don't know if this is just my machine setup....

I start a GDB session, and do this:

(gdb) echo hello\n
hello

At this point I start a reverse search, so I type:

<ctrl+r>
echo
<ctrl+c>

Now I'm left in this situation:

(gdb) echo hello\n
^
'-- Prompt is here.

So, whatever I was in the process of finding when I hit Ctrl+C is left
on my prompt line in an editable state.

This is different from the behaviour I see in, for example, bash,
where when I Ctrl+C the reverse search is aborted and I'm dropped back
to an empty prompt.

Which behaviour do you see?

Which behaviour do you expect to see?

Thanks,
Andrew

> > >
> > > gdb/ChangeLog:
> > >
> > > 2020-04-25  Hannes Domani  <ssbssa@yahoo.de>
> > >
> > >     PR gdb/21690
> > >     * main.c (start_event_loop): Call rl_callback_sigcleanup.
> > > ---
> > > gdb/main.c | 4 ++++
> > > 1 file changed, 4 insertions(+)
> > >
> > > diff --git a/gdb/main.c b/gdb/main.c
> > > index 59cb14161b..a8c1d3ccb1 100644
> > > --- a/gdb/main.c
> > > +++ b/gdb/main.c
> > > @@ -55,6 +55,8 @@
> > > #include "gdbsupport/alt-stack.h"
> > > #include "observable.h"
> > >
> > > +#include "readline/readline.h"
> > > +
> > > /* The selected interpreter.  This will be used as a set command
> > >     variable, so it should always be malloc'ed - since
> > >     do_setshow_command will free it.  */
> > > @@ -371,6 +373,8 @@ start_event_loop ()
> > >         in a messed-up state.  Reset it here.  */
> > >       current_ui->prompt_state = PROMPT_NEEDED;
> > >       gdb::observers::command_error.notify ();
> > > +      /* Clean up internal state of the callback interface.  */
> > > +      rl_callback_sigcleanup ();
> > >       /* This call looks bizarre, but it is required.  If the user
> > >         entered a command that caused an error,
> > >         after_char_processing_hook won't be called from
> > > --
> > > 2.26.2