gdb pty problem [Was: emacs gud-interface is not updated after gdb command execution (maybe because of incomplete output from gdb)]
Corinna Vinschen
corinna-cygwin@cygwin.com
Wed Jun 1 14:18:00 GMT 2016
Hi Takashi,
can you please have a look?
Thanks,
Corinna
On Jun 1 08:51, Ken Brown wrote:
> On 5/31/2016 5:41 AM, Corinna Vinschen wrote:
> > Any chance you could bisect Cygwin to help finding the culprit?
>
> The culprit is
>
> commit 252a07b0ad3353abcd0fcd9b1b65ff977acd679e
> Author: Takashi Yano <takashi.yano@nifty.ne.jp>
> Date: Fri Apr 3 13:07:35 2015 +0900
>
> Cygwin hangs up if several keys are typed during outputting a lot of texts.
>
> * fhandler_tty.cc (fhandler_pty_slave::read): Change calculation of
> "readlen" not to use "bytes_in_pipe" value directly.
>
>
> Reverting that commit fixes the problem. To test, compile and run the attached file.
>
> $ gcc gdbstc.cc
>
> $ ./a
> 1-inferior-tty-set /dev/pty3
> 2-gdb-set height 0
> 3-gdb-set non-stop 1
> 4-file-list-exec-source-files
> 5-file-list-exec-source-file
> 6-gdb-show prompt
> 7-stack-info-frame
> 8-thread-info
> 9-break-list
> q
> *** using gdb
> =thread-group-added,id="i1"
> ~"GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1\n"
> ~"Copyright (C) 2015 Free Software Foundation, Inc.\n"
> ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
> ~"This GDB was configured as \"i686-pc-cygwin\".\nType \"show configuration\" for configuration details."
> ~"\nFor bug reporting instructions, please see:\n"
> ~"<http://www.gnu.org/software/gdb/bugs/>.\n"
> ~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/software/gdb/documentation/>.\n"
> ~"For help, type \"help\".\n"
> ~"Type \"apropos word\" to search for commands related to \"word\".\n"
> =cmd-param-changed,param="auto-load safe-path",value="/"
> (gdb)
> ...
>
> In bad cases (bug present), the program hangs and doesn't complete until the gdb process is killed from a different terminal. In good cases it runs to completion.
>
> Ken
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <pty.h>
> #include <string.h>
> #include <sys/wait.h>
>
> void get_output (int fd);
>
> int
> main (int argc, const char **argv)
> {
> int master;
> pid_t pid;
>
> if ((pid = forkpty (&master, NULL, NULL, NULL)) < 0)
> {
> perror ("forkpty");
> exit (1);
> }
> /* child */
> if (pid == 0)
> {
> const char *av[100];
> // putenv ("HOME=/tmp");
> int i = 0;
> #ifdef STRACE_GDB
> av[i++] = "strace";
> av[i++] = "-o";
> av[i++] = "/tmp/strace.out";
> #ifdef __CYGWIN__
> av[i++] = "--mask=all+paranoid";
> #endif
> #endif
> av[i++] = argv[1] ?: "gdb";
> fprintf (stderr, "*** using %s\n", av[0]);
> av[i++] = "-i=mi";
> av[i] = NULL;
> execvp (av[0], (char * const *) av);
> /* shouldn't get here */
> exit (1);
> }
> /* parent */
> const char *input[20];
>
> int i = 0;
> input[i++] = "1-inferior-tty-set /dev/pty3\n";
> input[i++] = "2-gdb-set height 0\n";
> input[i++] = "3-gdb-set non-stop 1\n";
> input[i++] = "4-file-list-exec-source-files\n";
> input[i++] = "5-file-list-exec-source-file\n";
> input[i++] = "6-gdb-show prompt\n";
> input[i++] = "7-stack-info-frame\n";
> input[i++] = "8-thread-info\n";
> input[i++] = "9-break-list\n";
> input[i++] = "q\n";
> input[i] = NULL;
>
> for (int i = 0; input[i]; ++i)
> {
> write (master, input[i], strlen (input[i]));
> // sleep (1);
> }
> get_output (master);
> wait (NULL);
> }
>
> void
> get_output (int fd)
> {
> char buf[4096];
>
> while (1)
> {
> int nread = read (fd, buf, sizeof (buf));
> if (nread > 0)
> write (STDOUT_FILENO, buf, nread);
> else
> {
> printf ("No more output. nread %d\n", nread);
> break;
> }
> }
> }
>
>
> --
> Problem reports: http://cygwin.com/problems.html
> FAQ: http://cygwin.com/faq/
> Documentation: http://cygwin.com/docs.html
> Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin/attachments/20160601/5e117886/attachment.sig>
More information about the Cygwin
mailing list