popen

Chris Hamilton chamilto@navtechinc.com
Wed Jan 22 14:23:00 GMT 2003


I didn't really think that odbc was causing the problem, so I linked in 
another threaded library and got the same result.  I think the general 
case is that gdb loses it's brains anytime a threaded library is linked 
in, a breakpoint is set and a popen is passed over.  I've tried this 
with a few safe libraries ( ie. libraries I didn't write ;) ), and this 
seems to hold up.


Chris Hamilton wrote:

> The problem seems to come when I include the odbc libraries included 
> with redhat 7.3.  I've included a test .c file that will cause the 
> problem when run with:
> cc popen_test.c -o a.out -g -lodbc
>
>
> Bruce Korb wrote:
>
>> Daniel Jacobowitz wrote:
>>  
>>
>>> On Mon, Jan 20, 2003 at 01:30:04PM -0800, Bruce Korb wrote:
>>>   
>>>
>>>> Chris Hamilton wrote:
>>>>     
>>>>
>>>>> Bruce,
>>>>> I came across your September 24th posting about gdb throwing off a
>>>>> "Cannot find thread 2049" when it hits a popen
>>>>> (http://sources.redhat.com/ml/insight/2002-q3/msg00185.html).
>>>>> I'm currently experiencing the same problem in my application, and 
>>>>> I was
>>>>> wondering if you had any advice on how to solve it.
>>>>>       
>>>>
>>
>>  
>>
>>> Popen should not present this problem.  I don't know why it does, so we
>>> need more information.
>>>   
>>
>>
>> It seems to occur when using popen, but not when I do all
>> the fork/exec stuff myself.  I'll see if a trivial popen
>> example duplicates the problem, but I would guess that many
>> would have complained by now if it were that easy.
>>
>>  
>>
>>> Meanwhile multi-process debugging is forthcoming.  The Linux kernel
>>> patches are already in and I have more GDB patches queued.
>>>   
>>
>>
>> Excellent!!  Thank you very much!
>>
>>  
>>
>------------------------------------------------------------------------
>
>#include <stdio.h>
>
>int main()
>{
>
>FILE *tpPipeFp;
>
>if((tpPipeFp = popen("test", "w")) == NULL)
>    {
>    printf("Can't open pipe\n");
>    exit();
>    }
>else
>    printf("I've opened the pipe\n");
>
>pclose(tpPipeFp);
>
>}
>
>  
>



More information about the Gdb mailing list