This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
As described in PR GDB/624:
Using the small program from gdb.base/commands.exp, the following copy
of a GDB sessions shows that commands associated to temporary
breakpoints are not executed when the breakpoint is hit:
(gdb) tbreak factorial
Breakpoint 1 at 0x8048582: file ./gdb.base/run.c, line 77.
(gdb) commands
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>silent
>printf "factorial command-list executed\n"
>cont
>end
(gdb) run 1
Starting program: [...]/gdb.base/commands 1
(gdb)
The backtrace confirms that the program executed up to the factorial
breakpoint, and then stopped.
(gdb) bt
#0 factorial (value=1) at ./gdb.base/run.c:77
#1 0x0804855e in main (argc=2, argv=0xbffffa34, envp=0xbffffa40)
at ./gdb.base/run.c:57
#2 0x4005514f in __libc_start_main () from /lib/libc.so.6
(gdb) p /x $pc
$1 = 0x8048582 <<<--- $pc is equal to bp #1 address
The expected output after the run command was:
(gdb) run 1
Starting program: [...]/gdb.base/commands 1
factorial command-list executed
1
Program exited normally.
(gdb)
The problem is that the breakpoint is deleted very early in the inferior
stop handling, so the rest of the code does not have a chance to see
that there was a temporary breakpoint there with a commands list to
execute. To fix this, it is necessary to delay a bit the deletion of
this breakpoint.
This is what the attached patch does. There is a small side-effect,
which I think should be ok, is that the after the temporary breakpoint
is hit, there is a small period during which the breakpoint is still
visible when doing ``info break''. The status report is disabled, and to
be deleted at the next stop.
I also attached an extra test in gdb.base/commands.exp.
No new regression introduced on x86-linux.
Ok to apply?
2002-07-31 Joel Brobecker <brobecker@gnat.com>
* breakpoint.c (breakpoint_auto_delete): Do not delete temporary
breakpoints to which a list of commands is attached. Mark them
for deletion at the next stop instead. Also disable them to avoid
hitting these breakpoints again.
Move the part that deletes the to-be-deleted breakpoints before
the part that deletes the temporary breakpoints, to avoid immediately
deleting the temporary breakpoints that we just marked for deletion.
2002-07-31 Joel Brobecker <brobecker@gnat.com>
* gdb.base/commands.exp (temporary_breakpoint_commands): New test.
Thanks,
--
Joel
Attachment:
tbreak_commands.diff
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |