diff options
author | Pedro Alves <palves@redhat.com> | 2008-05-06 18:49:19 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-05-06 18:49:19 +0000 |
commit | 02b19d84634b886502f86700748971b42dc77465 (patch) | |
tree | b1475ce9c42ed0ed8f0f91c990d9d5d940dd367e /gdb | |
parent | 15c1e57ffbcb27cd275429e689f509026bda698b (diff) | |
download | gdb-02b19d84634b886502f86700748971b42dc77465.zip gdb-02b19d84634b886502f86700748971b42dc77465.tar.gz gdb-02b19d84634b886502f86700748971b42dc77465.tar.bz2 |
* inf-loop.c (inferior_event_handler): Run all continuations and
print any language change before running the breakpoint commands.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/inf-loop.c | 33 |
2 files changed, 24 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 87950a4..7eb3b7b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +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. + 2008-05-06 Joel Brobecker <brobecker@adacore.com> * frame-unwind.c (frame_unwind_got_bytes): New function. diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c index 4889c6f..f77bc65 100644 --- a/gdb/inf-loop.c +++ b/gdb/inf-loop.c @@ -92,30 +92,35 @@ inferior_event_handler (enum inferior_event_type event_type, 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) |