all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Vladilen Kozin <vladilen.kozin@gmail.com>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: help-gnu-emacs@gnu.org, tramp-devel@gnu.org
Subject: Re: GDB over TRAMP: problem with user I/O
Date: Fri, 15 Dec 2017 16:38:56 +0000	[thread overview]
Message-ID: <CACw=CXP3NuGOsno7RjOj6unLppVZa+YkWpA6Ofk14zURboRd-Q@mail.gmail.com> (raw)
In-Reply-To: <87o9n66g2q.fsf@gmx.de>

Hi Michael,

thank you very much for digging into it. I played with ttys, too, and
had somewhat similar experience perhaps with less understanding on my
part. Similar bug plagues a ton of external debugging tools that
interface with GDB: google spits out a ton of complaints in code
blocks, netbeans, etc that's been popping up at least since 2009. All
suggested "solutions" amount to cargoculting some nonsense that on
occasion works.

There's one bug reported to GDB bugtracker ages ago that remains open
and might be of note:
https://sourceware.org/bugzilla/show_bug.cgi?id=11403

I've also updated to the latest version of everything just to confirm
the issue is present in the latest GDB - it is. I'll see if I really
want to dig deeper there. The only reason I went with this remote
debugging setup is cause OSX has become notoriously hostile to GDB, so
thought I might spin a Linux box with Vagrant and run all my probes
this way with Emacs acting a thin client. Would've been cool. Still,
Tramp is incredible piece of software - I'm in awe.

Will report back if discover smth noteworthy.

Best


On 10 December 2017 at 10:19, Michael Albinus <michael.albinus@gmx.de> wrote:
> Vladilen Kozin <vladilen.kozin@gmail.com> writes:
>
> Hi Vladilen,
>
>> Ran into problem with GDB over TRAMP. To me it looks like a bug in TRAMP
>> but could be that I've missed some settings required for such setup. Hence
>> posting here instead of bugs for now.
>
> First of all, I could reproduce it. But I'm not sure it is a Tramp
> error. Rather a missing feature.
>
> I've tried to understand how gdb is working. Took a while, I'm not
> familiar with that code. After gdb has been called, it starts to
> asynchronous processes: gud-<program> (bound to buffer *gud-<program>*),
> which is the gdb process itself, and gdb-inferior (bound to buffer
> *input/output of <program>*), which does not run any program, but
> allocates a tty only. You'll see this when calling "M-x list-processes".
>
> --8<---------------cut here---------------start------------->8---
> gdb-inferior    -2      run     *input/outpu... /dev/pts/4
> gud-debug       30367   run     *gud-debug*     /dev/pts/3   gdb -i=mi debug
> --8<---------------cut here---------------end--------------->8---
>
> Look at the local case: In the gdb-debug buffer, I've checked the used tty:
>
> --8<---------------cut here---------------start------------->8---
> (gdb) show inferior-tty
> Terminal for future runs of program being debugged is "/dev/pts/4".
> --8<---------------cut here---------------end--------------->8---
>
> Starting the test program, and checking outside Emacs for pts/4, you'll
> see that it is used by the gdb process:
>
> --8<---------------cut here---------------start------------->8---
> $ ps -eaf | grep pts/4
> albinus  30405 30367  0 11:07 pts/4    00:00:00 /home/albinus/tmp/fact/debug
> --8<---------------cut here---------------end--------------->8---
>
> Now I have performed the remote case. For simplicity, I have just
> prepended "/ssh::" to the test files, that's sufficient. The process
> list looks different:
>
> --8<---------------cut here---------------start------------->8---
> *tramp/ssh d... 30451   run     *tramp/ssh d... /dev/pts/3   /bin/sh -i
> gdb-inferior    30764   run     *input/outpu... /dev/pts/7   /bin/sh -i
> gud-debug       30740   run     *gud-debug*     /dev/pts/5   /bin/sh -i
> --8<---------------cut here---------------end--------------->8---
>
> You see, that the gdb-inferior does not return just a tty. This is not
> possible for remote processes. Instead, it is bound to /dev/pts/7, the
> tty of the running remote shell.
>
> In the gdb buffer, I've checked the used tty, again:
>
> --8<---------------cut here---------------start------------->8---
> (gdb) show inferior-tty
> Terminal for future runs of program being debugged is "/dev/pts/8".
> --8<---------------cut here---------------end--------------->8---
>
> Starting the test program, you'll see a different situation:
>
> --8<---------------cut here---------------start------------->8---
> $ ps -eaf | grep pts/8
> albinus  30567 30452  0 11:09 ?        00:00:00 sshd: albinus@pts/4,pts/6,pts/8
> albinus  30765 30567  0 11:09 pts/8    00:00:00 /bin/sh
> albinus  30927 26061  0 11:14 pts/9    00:00:00 grep pts/8
> $ ps -eaf | grep fact
> albinus  22347 22258  0 11:21 ?        00:00:00 /home/albinus/tmp/fact/debug
> albinus  22377 31587  0 11:22 pts/0    00:00:00 grep fact
> --8<---------------cut here---------------end--------------->8---
>
> The test program, debug, has no tty. And gdb tries to communicate with
> tty pts/8, which is the remote shell. Well, this cannot work. gdb tells
> you this with the message &"warning: GDB: Failed to set controlling
> terminal: Operation not permitted\n". Instead, your program is
> communicating with the shell which owns /dev/pts/8. You will see, that
> you could use the buffer *input/output of <program>* interactively.
>
> I have no idea how to fix this. Handling remote ttys simply does not
> work as gdb expects.
>
> Best regards, Michael.



-- 
Best regards
Vlad Kozin



  reply	other threads:[~2017-12-15 16:38 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-06 14:18 GDB over TRAMP: problem with user I/O Vladilen Kozin
2017-12-10 10:19 ` Michael Albinus
2017-12-15 16:38   ` Vladilen Kozin [this message]
     [not found] ` <87y3mar6p9.fsf@aol.com>
2017-12-10 15:16   ` Michael Albinus

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='CACw=CXP3NuGOsno7RjOj6unLppVZa+YkWpA6Ofk14zURboRd-Q@mail.gmail.com' \
    --to=vladilen.kozin@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    --cc=michael.albinus@gmx.de \
    --cc=tramp-devel@gnu.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.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.