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)