Re: repeat command on return after issuing guile command

Matt Rice <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CACTLOFr-hRC14+He+KrdmFxx28Bo2rvSw75o15fLddR=v+SWxw@mail.gmail.com>
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.