Can't debug bash with gdb 8.2.1-1

Jon Turney jon.turney@dronecode.org.uk
Thu Jul 25 12:12:00 GMT 2019


On 24/07/2019 15:42, Ken Brown wrote:
> On 7/24/2019 10:32 AM, Ken Brown wrote:
>> On 7/24/2019 8:33 AM, Ken Brown wrote:
>>> $ cat getpgrp_test.c
>>> #include <unistd.h>
>>> #include <stdio.h>
>>> #include <errno.h>
>>>
>>> int
>>> main ()
>>> {
>>>       pid_t pid = getpid ();
>>>       pid_t pgid = getpgid (0);
>>>       printf ("getpid () = %d, getpgid (0) = %d, errno = %d\n", pid, pgid, errno);
>>> }
>>>
>>> $ gcc -o getpgrp_test -Wall -g -O0 getpgrp_test.c
>>>
>>> $ ./getpgrp_test.exe
>>> getpid () = 1424, getpgid (0) = 1424, errno = 0
>>>
>>> $ gdb ./getpgrp_test.exe
>>> GNU gdb (GDB) (Cygwin 8.2.1-1) 8.2.1
>>> [...]
>>> (gdb) r
>>> Starting program: /home/kbrown/Documents/programming/misc_examples/getpgrp_test.exe
>>> [...]
>>> getpid () = 1427, getpgid (0) = -1, errno = 0
>>> [...]
>>> [Inferior 1 (process 23872) exited normally]
>>>
>>> So getpgid (0) returns -1 without setting errno.  I think this means that
>>> pinfo::init() didn't fail, but for some reason myself->pgid == -1.
>>
>> I just ran the above gdb session under strace and found several lines like this:
>>
>>       25 32828861 [main] gdb 1799 tcsetpgrp: 0 = tcsetpgrp(0, -1)
>>
>> I haven't looked at the gdb code, but doesn't this mean that gdb is trying to
>> set pgrp to -1?  If so, why?  And shouldn't tcsetpgrp return -1 with EINVAL?

Well spotted.

> I just looked at the gdb commit that Jon pointed to earlier in the thread.  It
> adds calls like this:
> 
>     result = tcsetpgrp (0, getpgid (inf->pid));
> 
> It then checks for errors and takes appropriate action.  But tcsetpgrp returns
> success.
> 
> So this all seems to boil down to the fact that Cygwin's tcsetpgrp() doesn't
> check the validity of its second argument.

Great.  Thanks very much for looking into this.

I guess I need to look into gdb to see if it's trying to use -1 due to 
some other problem, or just expects that to be ignored.

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