This is the mail archive of the gdb-patches@sourceware.org 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]

Re: Handle SIGINT in Python


On Thu, Jan 12, 2012 at 1:17 AM, Doug Evans <dje@google.com> wrote:
>
> On Wed, Jan 11, 2012 at 12:55 PM, Tom Tromey <tromey@redhat.com> wrote:
> >>>>>> "Doug" == Doug Evans <dje@google.com> writes:
> >
> > Doug> There is value in having the SIGINT *only* affect the inferior.
> > Doug> It's up to the script to handle the various reasons why the inferior
> > Doug> may have stopped, and you don't (generally) want to interfere with
> > Doug> that (by interrupting the script too).
> >
> > I think Python code should have to request something like this
> > specially. ?The scripting case is less usual than the interactive
> > debugging (perhaps with some Python helper code) case. ?I think it would
> > be weird for the behavior the user sees, by default, to depend on
> > whether Python or GDB code was active at the moment of C-c.
>
> I'm not sure we're talking about the same thing.
> I wasn't suggesting the behaviour be different depending on whether
> GDB or Python was running.
> [For reference sake, to make sure we're on the same page, my comment
> is solely for the case where the inferior is launched by gdb, the
> inferior is running, has the terminal, and will get the SIGINT.]
>
> > That is, a C-c when processing a 'python' command in a breakpoint's
> > 'commands' list should have the same general effect as if we were
> > processing any other command.
>
> PTAL.

Hello,

just my 2 cents to the discussion.
[I'm not sure I could follow all the arguments, so my comments are
based on Khoo's patch]

+static void
+gdbpy_handle_sigint (int sig)
+{
+  PyErr_SetInterrupt ();
+}

I would be quite afraid if GDB could throw an
KeyboardInterruptException in any call to its API, there wouldn't be
any way to ensure internal consistency inside the script, except with
try_catch surrounding every GDB function call ...

In http://sourceware.org/bugzilla/show_bug.cgi?id=12615 I suggested
using something similar to what already exist in GDB:

> #define QUIT { \
>   if (quit_flag) quit (); \
>   if (deprecated_interactive_hook) deprecated_interactive_hook (); \
> }

and:

> /* Nonzero means a quit has been requested.  */
> int quit_flag;
> int immediate_quit;

that is, setting a Python-reachable flag and let the script decides what to do.

`remote.c' mechanism

> /* Signal handler for SIGINT, while the target is executing.  */
> static void
>
> handle_remote_sigint (int sig)
> {
>  signal (sig, handle_remote_sigint_twice);
>  ...

> /* Signal handler for SIGINT, installed after SIGINT has already been
>   sent once.  It will take effect the second time that the user sends
>   a ^C.  */
>  static void
>  handle_remote_sigint_twice (int sig)

could also be used to actually send the KeyboardInterruptException if
C^c is hit twice.


Kevin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]