This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: continuations and breakpoint commands
- From: Pedro Alves <pedro at codesourcery dot com>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: gdb-patches at sourceware dot org
- Date: Tue, 6 May 2008 19:49:38 +0100
- Subject: Re: continuations and breakpoint commands
- References: <200804292221.52239.pedro@codesourcery.com> <20080502153826.GP29202@caradoc.them.org>
A Friday 02 May 2008 16:38:26, Daniel Jacobowitz wrote:
> On Tue, Apr 29, 2008 at 10:21:52PM +0100, Pedro Alves wrote:
> > 2008-04-29 Pedro Alves <pedro@codesourcery.com>
> >
> > * inf-loop.c (inferior_event_handler): Run all continuations and
> > print any language change before running the breakpoint commands.
>
> Looks OK, unless it needs to be reworked after the discussion we're
> currently having about what happens to other continuations.
Since we are not going to add per-thread continuations in all-stop mode
after all, I've checked this in, after another round of testing.
--
Pedro Alves
2008-05-06 Pedro Alves <pedro@codesourcery.com>
* inf-loop.c (inferior_event_handler): Run all continuations and
print any language change before running the breakpoint commands.
---
gdb/inf-loop.c | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
Index: src/gdb/inf-loop.c
===================================================================
--- src.orig/gdb/inf-loop.c 2008-05-06 19:23:15.000000000 +0100
+++ src/gdb/inf-loop.c 2008-05-06 19:23:52.000000000 +0100
@@ -92,30 +92,35 @@ inferior_event_handler (enum inferior_ev
was_sync = sync_execution;
async_enable_stdin ();
- /* If there's an error doing breakpoint commands, we don't
- want to throw -- continuation might still do something. */
- TRY_CATCH (e, RETURN_MASK_ALL)
- {
- bpstat_do_actions (&stop_bpstat);
- }
/* If we were doing a multi-step (eg: step n, next n), but it
got interrupted by a breakpoint, still do the pending
continuations. The continuation itself is responsible for
- distinguishing the cases. */
+ distinguishing the cases. The continuations are allowed to
+ touch the inferior memory, e.g. to remove breakpoints, so run
+ them before running breakpoint commands, which may resume the
+ target. */
do_all_intermediate_continuations (0);
+ /* Always finish the previous command before running any
+ breakpoint commands. Any stop cancels the previous command.
+ E.g. a "finish" or "step-n" command interrupted by an
+ unrelated breakpoint is canceled. */
do_all_continuations (0);
- if (current_language != expected_language)
+ if (current_language != expected_language
+ && language_mode == language_mode_auto)
+ language_info (1); /* Print what changed. */
+
+ /* Don't propagate breakpoint commands errors. Either we're
+ stopping or some command resumes the inferior. The user will
+ be informed. */
+ TRY_CATCH (e, RETURN_MASK_ALL)
{
- if (language_mode == language_mode_auto)
- {
- language_info (1); /* Print what changed. */
- }
+ bpstat_do_actions (&stop_bpstat);
}
- /* If the continuation did not start the target again,
- prepare for interation with the user. */
+ /* If no breakpoint command resumed the inferior, prepare for
+ interaction with the user. */
if (!target_executing)
{
if (was_sync)