Re: Sending signal to inferior

Bob Rossi
2005-12-30T23:14:07Z

On Fri, Dec 30, 2005 at 05:58:12PM -0500, Bob Rossi wrote:
> On Fri, Dec 30, 2005 at 11:48:02AM -0500, Daniel Jacobowitz wrote:
> > On Fri, Dec 30, 2005 at 11:43:00AM -0500, Bob Rossi wrote:
> > > On Fri, Dec 30, 2005 at 04:57:38AM +0000, Carlos Eduardo Rodrigues de Almeida wrote:
> > > > Thank you.. I'm trying to solve this for days..
> > >
> > > Wow, that took me a long time to figure out, and I wrote libtgdb.
> > >
> > > It's the tty command that is allowing libtgdb to interrupt GDB when the
> > > inferior is running. Apparently, if you don't move the inferior's
> > > terminal via the GDB tty command, then you can't interrupt the inferior
> > > when it's running.
> > >
> > > Basically, I'm assuming that the SIGINT to GDB is ignored if the
> > > inferior has control of the terminal. However, if you put the inferior
> > > on a different terminal, then GDB must handle the SIGINT. This
> > > explanation is just a guess though.
> >
> > It shouldn't be. Check whether GDB is reaching handle_sigint() and
> > whether it is going through the event loop properly?
>
> This is a tough one. For some reason, if I start debugging GDB, it
> doesn't reach the handle_sigint line. However, with fprintf there, I'm
> seeing output. Could I be doing something wrong or is this expected?
>
> I configured && compiled like this:
> cvs -d ':ext:bobbybrasko@sources.redhat.com:/cvs/src' co gdb
> CFLAGS=-g ../src/configure
> make
>
> I was wondering if any of the -W compile options stop me from debuging
> GDB in this case.
>

What I can tell you from instrumentation is this. handle_sigint is not
called when the inferior is running and the tty command was used. Out of
the 4 cases

inferior running/tty used
inferior running/tty not used
inferior not running/tty used
inferior not running/tty not used

only the first case does not allow GDB to get into handle_sigint.

So, if GDB get's a SIGINT when the inferior is running and the tty is not set,
then handle_sigint get's called. After the inferior is done running,
quit() get's called and displays "Quit".

If GDB get's a SIGINT when the inferior is running and the tty is not
set, handle_sigint does not get called, and somehow GDB is interupted.
However, I can't figure out why.

Bob Rossi