Re: repeat command on return after issuing guile command

David Boles <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <1493656627.1159458.961959512.72D00241@webmail.messagingengine.com>
My apologies - I never run gdb outside of Emacs and made the assumption
that an interaction between the gdb-mi.el code, guile, and command
repeating wasn't plausible.

The problem indeed does not occur with gdb itself, only when run from
within emacs.

I will go and investigate things from the Emacs side of things and try
to develop a patch for this behavior.

Thanks for setting me straight.

 - db

On Mon, May 1, 2017, at 06:20 AM, Matt Rice wrote:
> On Sun, Apr 30, 2017 at 12:03 PM, Eli Zaretskii <[email protected]> wrote:
> >> From: David Boles <[email protected]>
> >> Date: Fri, 28 Apr 2017 22:50:18 -0500
> >>
> >> I have recently been learning to use the guile mechanism for extending gdb’s capabilities - very powerful. One thing that I have noticed is that after a “guile (…)” command is issued, the normal behavior of gdb re-performing the last command executed if you just hit enter is disabled. This applies to even native gdb commands like “next” or “step” - which is quite painful.
> >>
> >> I have observed this with versions 7.10.x and 7.12.1.
> >
> > I cannot reproduce this with GDB 7.12 built with Guile 2.0.X.  I tried
> > this:
> >
> >   (gdb) apropos file
> >   ... long list of commands ...
> >   (gdb) <press RET>
> >   ... the same long list of commands ...
> >   (gdb) guile (display (+ 20 3)) (newline)
> >   23
> >   (gdb) apropos file
> >   ... long list of commands ...
> >   (gdb) <press RET>
> >   ... the same long list of commands ...
> >
> > So it seems to work as expected for me.  Can you show a recipe that
> > exhibits the problem on your system?
> 
> One thing that I can think of is if the guile script being executed
> causes the program to continue,
> which then hits a breakpoint which has "commands" associated with it,
> the call to prevent_dont_repeat in
> breakpoint.c (bpstat_do_actions_1), could have some clobbering effect
> messes with the repeat.
> 
> I cannot seem reproduce such behavior though
> 
> using the following foo.gdb:
> set breakpoint pending on
> break foo
> commands 1
>   print "foo"
> end
> guile (use-modules (gdb))
> guile (execute "start")
> guile (execute "cont")
> 
> $ echo "void foo() {}; int main() { while (1) foo(); return 0; }" |
> gcc -g -x c - && gdb -quiet ./a.out -ex 'source foo.gdb'
> Reading symbols from ./a.out...done.
> Breakpoint 1 at 0x4004aa: file <stdin>, line 1.
> Breakpoint 1, foo () at <stdin>:1
> 1    in <stdin>
> $1 = "foo"
> (gdb) guile (execute "cont")
> Breakpoint 1, foo () at <stdin>:1
> 1    in <stdin>
> $2 = "foo"
> (gdb)
> Breakpoint 1, foo () at <stdin>:1
> 1    in <stdin>
> $3 = "foo"
> (gdb)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.