From: Bob Rossi <bob_rossi@cox.net>
To: Jim Blandy <jimb@codesourcery.com>
Cc: gdb@sources.redhat.com
Subject: Re: invoking GDB from FE and signals
Date: Fri, 19 May 2006 01:19:00 -0000 [thread overview]
Message-ID: <20060519005831.GG21003@brasko.net> (raw)
In-Reply-To: <vt27j4jkz1r.fsf@theseus.home.>
On Thu, May 18, 2006 at 10:44:48AM -0700, Jim Blandy wrote:
>
> Bob Rossi <bob_rossi@cox.net> writes:
> >> > We send the signal to the inferior ... the problem when running gdb is to
> >> > ... get the inferior PID ... sigh. We have circumvent the problem is
> >> > commercial products but did not fine a generic way to get the pid.
> >>
> >> You should use the 'set tty' command to run the user's program under
> >> its own pseudo-tty, and then stuff the appropriate control characters
> >> at the master side. That's the only way to do the right thing if the
> >> inferior is doing job-control-like stuff, like a shell.
> >
> > OK, I agree with all of this, and Jim your comments have been extremly
> > helpful. I'm left confused on 2 issues.
> >
> > Do I ever want to send a ^c signal to GDB? That is, if the inferior is
> > not running, should I still send the ^c to the inferior's tty? If I'm
> > supposed to send the ^c to GDB when it is running and to the inferior
> > when it is running, then that is impossible from my point of view. And a
> > good argument against using the tty command.
>
> I think you're coming at the problem in an odd way. You seem to be
> thinking, "I've got this C-c --- what do I do with it?" Instead,
> think about what facilities your user needs.
Well, I'm realising, this certainly wouldn't be an issue if I didn't use
the tty command. In fact, emacs doesn't use the tty command by default,
so it handles all of this perfectly I'd imagine. The only downside that
emacs has to deal with, is separating the gdb/mi output and the inferior
output. This is discussed below.
> - They need a way to stop their program and get control back to GDB.
Yes.
> - They may (or may not, it's not clear to me) need a way to interrupt
> GDB when it's doing a long computation.
Yes. As long as GDB handles this nicely in regards to the MI output.
If the user can do this at the GDB console, the FE should support it,
no?
> There's a clear need for the first thing. The user's program isn't
> behaving as expected; that's why they're debugging it. So you need to
> provide some command to interrupt a running program. This can be
> implemented by sending a SIGINT via the pty.
Understood. I think that the discusion on HOW to send a signal to a pty
has been answered very well. I do un
> The second thing, I'm not sure you need. I mean, how many word
> processors provide a way to interrupt some long internal computation
> they're doing? If you do find a case like this, well, your front end
> knows what it just asked GDB to do; when it sends some request that it
> thinks might take a long time and would like to allow the user to
> interrupt, it can tell the user interface about that and handle
> requests to bail by sending a SIGINT to the GDB process itself. And
> make sure your parser is prepared for whatever kind of malformed stuff
> that produces (if it does; I don't know).
Assuming I want to handle both of those case's like emacs does, I'm left
with a problem because I use the 'set tty' command. For instance, I get
a ^c, I need to send it somewhere because I don't know if GDB is running
or if the inferior is running.
Unless I'm wrong, and I often am!, I think the 'set tty' option that GDB
provides has a major limitation. If the FE uses it, it can't determine
which pty to send the SIGINT to when it recieves one. With this in mind,
I suggest a new solution that could go in several directions.
The inferior and GDB should be run on the same pseudo terminal for the
reasons above. So moving the inferior to it's own terminal doesn't help
much. I suggest adding a new feature to GDB, something like
'set gdb_io_tty /dev/pts/1' which would tell GDB what tty to output it's
I/O. However, GDB wouldn't change it's pty. This way, signals will be
delivered as if GDB was on the same terminal. Daniel, correct me if I'm
wrong, but this solution would work with the changes we made to the test
suite also.
Another approach would be to act like valgrind does. That is, provide a
file descriptor that GDB should write to. For instance, gdb
--file-io=100, which would cause GDB to output it's I/O on file
descriptor 100. This has a limitation in that it could possibly
interface with the inferior outputting data on file descriptor 100.
However, it would port to windows very nicely.
Any comments?
Anyways, thanks to everyone for helping me understand HOW to send a
signal to a pty. This information was more than helpful.
Thanks,
Bob Rossi
next prev parent reply other threads:[~2006-05-19 0:59 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-18 16:27 Alain Magloire
2006-05-18 16:55 ` Bob Rossi
2006-05-18 16:59 ` Andreas Schwab
[not found] ` <vt2bqtvl157.fsf@theseus.home.>
2006-05-18 17:44 ` Bob Rossi
2006-05-18 21:56 ` Jim Blandy
2006-05-19 1:19 ` Bob Rossi [this message]
2006-05-19 3:00 ` Daniel Jacobowitz
2006-05-19 12:49 ` Bob Rossi
2006-05-19 15:37 ` Daniel Jacobowitz
2006-05-19 15:56 ` Bob Rossi
2006-05-19 17:55 ` Jim Blandy
2006-05-19 19:22 ` Bob Rossi
2006-05-23 3:46 ` Jim Blandy
2006-05-18 22:51 ` Andreas Schwab
2006-05-18 23:25 ` Bob Rossi
2006-05-19 1:17 ` Andreas Schwab
2006-05-18 23:28 ` Jim Blandy
2006-05-19 0:59 ` Andreas Schwab
-- strict thread matches above, loose matches on Subject: below --
2006-05-13 15:09 Bob Rossi
2006-05-13 15:11 ` Daniel Jacobowitz
2006-05-13 15:19 ` Bob Rossi
2006-05-13 15:48 ` Daniel Jacobowitz
2006-05-13 15:49 ` Bob Rossi
2006-05-13 17:11 ` Daniel Jacobowitz
2006-05-14 3:25 ` Bob Rossi
2006-05-14 4:17 ` Nick Roberts
2006-05-14 4:18 ` Eli Zaretskii
2006-05-14 5:01 ` Daniel Jacobowitz
2006-05-15 6:55 ` Nick Roberts
2006-05-15 13:35 ` Daniel Jacobowitz
2006-05-15 13:39 ` Bob Rossi
2006-05-15 15:04 ` Daniel Jacobowitz
2006-05-15 19:04 ` Jim Blandy
2006-05-15 13:37 ` Jim Blandy
2006-05-15 14:58 ` Bob Rossi
2006-05-15 18:50 ` Jim Blandy
2006-05-15 20:09 ` Bob Rossi
2006-05-15 18:42 ` PAUL GILLIAM
2006-05-15 19:18 ` Bob Rossi
2006-05-15 19:43 ` Daniel Jacobowitz
2006-05-15 20:05 ` Bob Rossi
2006-05-15 20:09 ` Daniel Jacobowitz
2006-05-15 20:20 ` Bob Rossi
2006-05-15 21:02 ` Daniel Jacobowitz
2006-05-15 21:08 ` Bob Rossi
2006-05-15 21:31 ` Daniel Jacobowitz
2006-05-15 21:33 ` Bob Rossi
2006-05-15 20:11 ` PAUL GILLIAM
2006-05-15 20:33 ` Bob Rossi
2006-05-15 21:52 ` Joel Brobecker
2006-05-15 22:40 ` Bob Rossi
2006-05-16 3:32 ` Nick Roberts
2006-05-18 1:40 ` Bob Rossi
2006-05-18 12:32 ` Jim Blandy
2006-05-18 7:28 ` Bob Rossi
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=20060519005831.GG21003@brasko.net \
--to=bob_rossi@cox.net \
--cc=gdb@sources.redhat.com \
--cc=jimb@codesourcery.com \
/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