Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Eli Zaretskii via Gdb-patches <gdb-patches@sourceware.org>
To: Pedro Alves <pedro@palves.net>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2 00/16] Interrupting programs that block/ignore SIGINT
Date: Wed, 16 Jun 2021 15:45:39 +0300	[thread overview]
Message-ID: <835yye2d1o.fsf@gnu.org> (raw)
In-Reply-To: <afc60082-886c-47d4-d1d2-a9d5764e6951@palves.net> (message from Pedro Alves on Wed, 16 Jun 2021 12:27:28 +0100)

> From: Pedro Alves <pedro@palves.net>
> Cc: gdb-patches@sourceware.org
> Date: Wed, 16 Jun 2021 12:27:28 +0100
> 
> Debugging curses programs works fine, because we "pump" all input/output between
> the terminals, escape sequences and all.  E.g., I use the TUI frequently, and
> debugging gdb with itself and enabling the TUI in the inferior gdb works fine.  
> No other pumping is done, only input/output.
> 
> When the new terminal is created, it inherits the terminal settings of the
> GDB terminal, but otherwise, the inferior's terminal settings are not
> reflected in GDB's terminal settings.  I mean, if the program changes \n -> \r\n
> translation in the inferior, that changes the inferior's terminal, and what ends
> up output to the pseudo-terminal slave end.  When GDB flushes that into its
> own terminal, GDB puts its own terminal in raw mode, so that exactly whatever
> characters/bytes the inferior wanted to send to the screen, they end up in
> GDB's terminal.  Similarly for the input direction.

That's good to hear, but it sounds like we aren't entirely sure which
features won't work with this arrangement, and are still going by
trial and error?  I hope by the time we release GDB 12, the
restrictions and other issues caused by this change will be
well-known, because we will need to document them, so users could know
in advance when they need to go back to the original behavior.

Or maybe I can persuade you to turn this feature off by default, at
least for GDB 12?

> Cut/paste works fine for me, but I'm not sure I'm trying what you are
> suggesting.

I meant the so-called "bracketed paste mode", see

  https://cirw.in/blog/bracketed-paste

> E.g., I debug a GDB that is running in TUI mode, and then I can use
> the mouse to select text (shift click drag) and then paste it back (shift middle click).
> This is all implemented in the terminal emulator, the application has no idea about it,
> it's just text grabbed from the screen, and then input back into the application,
> as if you typed it.

Yes, but some of these features need to be turned on before they can
be used.  The application (think: Emacs) does that for its terminal,
but not for the GDB terminal.

> Changing the interrupt character does not work.  If I debug emacs in text-mode, and
> then press ctrl-c, it drops you back into GDB, like:
> 
>  Thread 1 "emacs" stopped.
>  0x00007ffff5197246 in __pselect (nfds=9, readfds=0x7fffffffc8a0, writefds=0x7fffffffc920, exceptfds=0x0, timeout=<optimized out>, sigmask=<optimized out>) at ../sysdeps/unix/sysv/linux/pselect.c:48                                                           |
>  48      ../sysdeps/unix/sysv/linux/pselect.c: No such file or directory.
>  (gdb)

This means that no Emacs key sequence that uses C-c will work under
GDB in this new mode, right?  In particular, "C-x C-c", which exits
Emacs?  That's why Emacs reprograms the terminal to use C-g instead.

> If I press "ctrl-g", I then get "Program stopped by SIGINT":
> 
>  Thread 1 "emacs" received signal SIGINT, Interrupt.
>  0x00007ffff5197246 in __pselect (nfds=9, readfds=0x7fffffffc8a0, writefds=0x7fffffffc920, exceptfds=0x0, timeout=<optimized out>, sigmask=<optimized out>) at ../sysdeps/unix/sysv/linux/pselect.c:48                                                           |
>  48      in ../sysdeps/unix/sysv/linux/pselect.c
>  (gdb)

Is this with the default setting in src/.gdbinit?  It says

  handle 2 noprint pass

And it does that for a reason: C-g is handled by the Emacs signal
handler.

> I see this as a feature and it goes back to the "supervisor" idea discussed
> in the other thread.  To change the "supervisor" interrupt key, you have to
> change the interrupt key in the supervisor's terminal, with e.g., "$ stty intr ^G".
> or even "(gdb) shell stty intr ^G".  Not unlike if you had attached to emacs
> instead of spawned it.  I guess the emacs's emacs-gdb.gdb file could run that
> stty command, so it is run automatically when debugging emacs.  The altered intr key will
> remain in effect after gdb exits, though.  (I can reproduce it with current GDB.)
> I guess GDB could grow a built-in command for that to avoid it.  

But that is only needed (or useful) if this new pseudo-tty mode is
being used, right?  How can this be expressed in a .gdbinit file, to
avoid sending unnecessary and potentially disruptive stty commands?

  reply	other threads:[~2021-06-16 12:46 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-14 21:23 Pedro Alves
2021-06-14 21:23 ` [PATCH v2 01/16] Test interrupting programs that block SIGINT [gdb/9425, gdb/14559] Pedro Alves
2021-06-14 21:23 ` [PATCH v2 02/16] prefork_hook: Remove 'args' parameter Pedro Alves
2021-06-14 21:23 ` [PATCH v2 03/16] Make gdb.base/long-inferior-output.exp fail fast Pedro Alves
2021-06-14 21:23 ` [PATCH v2 04/16] Fix gdb.multi/multi-term-settings.exp race Pedro Alves
2021-06-14 21:23 ` [PATCH v2 05/16] Don't check parent pid in gdb.threads/{ia64-sigill, siginfo-threads, watchthreads-reorder}.c Pedro Alves
2021-06-14 21:24 ` [PATCH v2 06/16] Special-case "set inferior-tty /dev/tty" Pedro Alves
2021-06-14 21:24 ` [PATCH v2 07/16] Make inferior/GDB share terminal in tests expecting output after detach Pedro Alves
2021-06-14 21:24 ` [PATCH v2 08/16] Make inferior/GDB share terminal in tests that exercise GDB/inferior reading same input Pedro Alves
2021-06-14 21:24 ` [PATCH v2 09/16] gdb.mi/mi-logging.exp, don't send input to GDB while the inferior is running Pedro Alves
2021-06-14 21:24 ` [PATCH v2 10/16] target_terminal::ours_for_output before printing signal received Pedro Alves
2021-06-14 21:24 ` [PATCH v2 11/16] Move scoped_ignore_sigttou to gdbsupport/ Pedro Alves
2021-06-17 21:49   ` Pedro Alves
2021-06-14 21:24 ` [PATCH v2 12/16] Always put inferiors in their own terminal/session [gdb/9425, gdb/14559] Pedro Alves
2021-06-14 21:24 ` [PATCH v2 13/16] exists_non_stop_target: Avoid flushing frames Pedro Alves
2021-06-14 21:24 ` [PATCH v2 14/16] convert previous_inferior_ptid to strong reference to thread_info Pedro Alves
2021-06-14 21:24 ` [PATCH v2 15/16] GNU/Linux: Interrupt/Ctrl-C with SIGSTOP instead of SIGINT [PR gdb/9425, PR gdb/14559] Pedro Alves
2021-07-08 23:05   ` Maciej W. Rozycki
2021-07-13 15:26     ` Pedro Alves
2021-06-14 21:24 ` [PATCH v2 16/16] Document pseudo-terminal and interrupting changes Pedro Alves
2021-06-15 12:56   ` Eli Zaretskii via Gdb-patches
2021-06-16  9:31     ` Pedro Alves
2021-06-16 12:29       ` Eli Zaretskii via Gdb-patches
2021-06-16 10:15     ` Pedro Alves
2021-06-16 12:15       ` Eli Zaretskii via Gdb-patches
2021-06-16 12:26         ` Pedro Alves
2021-06-16 13:05           ` Eli Zaretskii via Gdb-patches
2021-06-15 12:34 ` [PATCH v2 00/16] Interrupting programs that block/ignore SIGINT Eli Zaretskii via Gdb-patches
2021-06-16 11:27   ` Pedro Alves
2021-06-16 12:45     ` Eli Zaretskii via Gdb-patches [this message]
2021-06-18 10:12 ` Andrew Burgess
2021-06-24 18:12 ` Konstantin Kharlamov via Gdb-patches
2021-06-24 18:55   ` Pedro Alves
2021-06-29  1:15     ` Eldar Abusalimov via Gdb-patches

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=835yye2d1o.fsf@gnu.org \
    --to=gdb-patches@sourceware.org \
    --cc=eliz@gnu.org \
    --cc=pedro@palves.net \
    /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