Mail Archives: cygwin/2012/05/03/16:05:45
--------------010105010903030906040804
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
On 10/23/2011 5:47 PM, Ken Brown wrote:
> On 10/23/2011 3:04 PM, Christopher Faylor wrote:
>> On Sat, Oct 22, 2011 at 04:37:55PM -0400, Ken Brown wrote:
>>> The attached testcase illustrates a problem with `gdb -i=mi'. I've
>>> tested both gdb 7.3.50-1 and 7.3.50-2, with cygwin 1.7.9 as well as with
>>> several recent snapshots (including 2011-10-22).
>>>
>>> Under some circumstances, if gdb -i=mi is started and given several
>>> input lines at once, it only prints part of the output before stopping.
>>> I've been able to reproduce this once in a while while working
>>> interactively (by copying and pasting the whole bunch of input lines);
>>> in this case one can press Return to get the rest of the output. But
>>> the problem happens consistently with the attached test case, which runs
>>> gdb in a subprocess. One has to kill the gdb process before the main
>>> program exits.
>>>
>>> The STC runs as expected on Linux.
>>
>> Thanks for the STC. I had to tweak it to actually see how it was supposed
>> to work on Linux since only a limited number of lines from the pty were
>> being output. I've included the revised test case below.
>>
>> I made a simple change to Cygwin which will probably cause subtle
>> problems somewhere down the line. At least for now it seems to make gdb
>> operate as expected.
>>
>> I'm building a new snapshot now.
>
> Thanks, that fixes it (as well as the emacs problem that originally led
> to this report). In case there are emacs users wondering what this is
> about, I've been testing emacs-24, which uses gdb -i=mi instead of the
> obsolete gdb --annotate=3 used by emacs-23.
I'm replying to this old thread because the problem is back again in
cygwin-1.7.14-2. I haven't checked to see exactly when it first
reappeared (but I'll do this if it would help.) The same STC as before
exhibits the problem; I'm attaching it for convenience.
Ken
--------------010105010903030906040804
Content-Type: text/plain; charset=windows-1252;
name="gdbstc.cc"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="gdbstc.cc"
#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;
}
}
}
--------------010105010903030906040804
Content-Type: text/plain; charset=us-ascii
--
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
--------------010105010903030906040804--
- Raw text -