Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: Re: Stop breakpoint commands from poping the target
Date: Mon, 17 Mar 2008 16:44:00 -0000	[thread overview]
Message-ID: <200803171643.43888.pedro@codesourcery.com> (raw)
In-Reply-To: <frdc6o$r2$1@ger.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 2093 bytes --]

A Friday 14 March 2008 08:15:30, Vladimir Prus wrote:
> Pedro Alves wrote:
> > This patch goes on top of Vladimir's pending async fixes patch.
> >
> > commands.exp triggers the problem this patch addresses, in
> > async mode.
> >
> > In that test, we have a watch on a local variable, and then we
> > add a command to that watch to print the local variable's
> > value.  When the variable goes out of scope, gdb prints that,
> > and also runs the associated commands with the watch.  Since
> > the variable is out of scope, and error is thrown.  In sync
> > targets, the exception just ends the breakpoints command
> > processing, and goes on to proceed with the command loop.  But in
> > async mode, the exception ends up in
> > inf-loop.c:inferior_event_handler/INF_REG_EVENT, which considers
> > exceptions fatal, and pops the target.  The fix is to catch the exception
> > earlier.
> >
> > Imagine the following command list associated with a breakpoint:
> >   non_existing_command
> >   info target
> >
> > As and example, in sync mode, trying to execute
> > non_existing_command causes an error that stops the
> > interpreting of all subsequent commands, hence info target is
> > never executed.  The patch installs the same behaviour for
> > async targets.
> >
> > commands.exp passes cleanly with the linux native async patch
> > I'll post next.
>
> Heh, we seem to have a mid-flight collision here -- I've a local
> patch moving the call to bpstat_do_actions into
> inferior_event_handler. The call you modify, in
> command_line_handler_continuation, runs for CLI only and it's
> quite possible to have commands on breakpoints even if GDB uses
> MI on the top level.
>
> But that only chances which line of code must be changed, while
> this patch is still needed. One tweak though -- I think it's
> better to use TRY_CATCH, not catch_exceptions -- it's just
> fewer lines.
>

I have been using this instead now.  Should I go ahead while you
don't post your patch (if it looks ok)?  Or is it coming out soon (,
hopefully with a similar fix in)?  I'm fine either way.

-- 
Pedro Alves

[-- Attachment #2: bpstat_do_actions_dont_escape_exception.diff --]
[-- Type: text/x-diff, Size: 1255 bytes --]

2008-03-17  Pedro Alves  <pedro@codesourcery.com>

	* top.c (command_line_handler_continuation): Wrap call to
	bpstat_do_actions in TRY_CATCH.

---
 gdb/top.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Index: src/gdb/top.c
===================================================================
--- src.orig/gdb/top.c	2008-03-14 22:36:07.000000000 +0000
+++ src/gdb/top.c	2008-03-14 22:46:02.000000000 +0000
@@ -376,7 +376,12 @@ command_line_handler_continuation (struc
   long time_at_cmd_start  = arg->data.longint;
   long space_at_cmd_start = arg->next->data.longint;
 
-  bpstat_do_actions (&stop_bpstat);
+  volatile struct gdb_exception exception;
+  TRY_CATCH (exception, RETURN_MASK_ALL)
+    {
+      /* Don't propagate errors to inferior_event_handler/INF_REG_EVENT.  */
+      bpstat_do_actions (&stop_bpstat);
+    }
 
   if (display_time)
     {
@@ -539,7 +544,7 @@ execute_command (char *p, int from_tty)
 	}
     }
 
-  /* Set things up for this function to be compete later, once the
+  /* Set things up for this function to be finished later, once the
      execution has completed, if we are doing an execution command,
      otherwise, just go ahead and finish. */
   if (target_can_async_p () && target_executing)

  parent reply	other threads:[~2008-03-17 16:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-14  8:02 Pedro Alves
2008-03-14  8:15 ` Vladimir Prus
2008-03-14 19:31   ` Daniel Jacobowitz
2008-03-17 16:44   ` Pedro Alves [this message]
2008-03-17 22:11     ` Daniel Jacobowitz
2008-03-15 15:59 ` Vladimir Prus
2008-03-17 16:49   ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200803171643.43888.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox