gdb hangs on ^Z [was: Re: 64-bit gdb: invalid decimal " 0x22DBF0"]

Ryan Johnson ryan.johnson@cs.utoronto.ca
Mon Jul 29 20:22:00 GMT 2013


On 29/07/2013 3:13 PM, Ryan Johnson wrote:
> On 29/07/2013 3:11 PM, Corinna Vinschen wrote:
>> On Jul 29 12:01, Ryan Johnson wrote:
>>> On 29/07/2013 7:06 AM, Corinna Vinschen wrote:
>>>> On Jul 27 11:30, Daniel Brown wrote:
>>>>> I have also ran into this problem, in my case though I have managed
>>>>> to reduce the issue down to an fgets call when reading a pipe.
>>>>> The following code causes the issue for me if I try and debug it:
>>>>>
>>>>> #include <stdio.h>
>>>>> #include <stdlib.h>
>>>>>
>>>>> int main(int argc, char** argv) {
>>>>>      char out[100] = {0};
>>>>>      FILE *pipe;
>>>>>
>>>>>      if ((pipe = popen("uname -r", "rt")) == NULL)
>>>>>          fprintf(stderr,"Failed to execute popen command");
>>>>>
>>>>>      if(fgets(out, 100, pipe) == NULL)
>>>>>          fprintf(stderr,"Failed to read popen buffer");
>>>>>
>>>>>      printf("%s\n", out);
>>>>>
>>>>>      pclose(pipe);
>>>>>
>>>>>      return (EXIT_SUCCESS);
>>>>> }
>>>>>
>>>>> I compile with `gcc -g main.c` then `gdb a.exe` and type `run`, the
>>>>> error `invalid decimal " 0x23DBF0"` then pops up.
>>>>> I have tried the latest snapshot cygwin1.dll (1.7.23s(0.268/5/3))
>>>>> and the error is still there.
>>>> This is a problem in GDB, not in the Cygwin DLL.  My mistake.  I 
>>>> fetched
>>>> the official 7.6 version of GDB since it already contained Cygwin 
>>>> x86_64
>>>> support so I thought it's sufficient.  Unfortunately it doesn't handle
>>>> special Cygwin strings in terms of Cygwin signal handling correctly.
>>>>
>>>> I'm just uploading a gdb-7.6.50 version build from current CVS which
>>>> should fix this.
>>> Confirmed that this problem is fixed [1]... however, my original STC
>>> still hangs because gdb somehow interferes with the choreography of
>>> SIGTSTP between victim and its owning shell.
>>>
>>> With default signal handling (SIGTSTP stop print pass) gdb breaks in
>>> when the victim receives ^Z, but both gdb and the victim hang once
>>> gdb continues; gdb cannot be interrupted with ^C [2]. Killing gdb
>>> allows the victim to finish backgrounding itself, apparently none
>>> the worse for wear.
>> I'm not sure if ^Z can reliably work in the GDB scenario. That's
>> Chris' domain, but AFAICS, the fact that GDB calls the inferior
>> process with CreateProcess, the job control facility of the shell
>> will be broken.
> I'm talking about the case where gdb attaches to a running proccess... 
> I don't know how you could ever handle ^Z in a process gdb started.
Just to be extra clear, the scenario is:
1. start STC in terminal A
2. start gdb in terminal B and attach it to the STC
3. type ^Z in terminal A

> Ryan


--
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



More information about the Cygwin mailing list