This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: breakpoints and pthreads


I finally found the cause of this problem--a stripped libpthread.
Gentoo strips it when emerging glibc.  To avoid this in Gentoo, add
nostrip to FEATURES.  ie:
 $> FEATURES=nostrip emerge glibc

Regards,
Nick

On Mon, 2004-05-24 at 04:28, Nick NoSpam wrote:
> Any ideas on this issue?  Should I file a bug?
> 
> I fiddled w/ this a little more and found that setting a breakpoint in
> the thread callback ('wait_thread' in the example below) causes
> problems.
> This is the output I get when the thread gets created:
> 
> Program received signal SIG32, Real-time event 32.
> Cannot remove breakpoints because program is no longer writable.
> It might be running in another process.
> Further execution is probably impossible.
> 0x4002ba34 in pthread_getconcurrency () from /lib/libpthread.so.0
> 
> Regards,
> Nick
> 
> 
> On Wed, 2004-05-19 at 21:33, Nick NoSpam wrote:
> > Hi,
> > 
> > I started using gdb a few months ago on RedHat (originally installed as
> > version 7.2).  While doing so, my little test program--which spawns a
> > thread--would stop execution in all threads (the main process and the
> > spawned thread) when a breakpoint was hit.  I read the documentation and
> > this is appropriate behavior:
> >   Section 5.4 Stopping and starting multi-threaded programs
> >   ...
> >   Whenever your program stops under GDB for any reason, *all* threads
> >   of execution stop, not just the current thread.
> > 
> > I recently switched to Gentoo which uses newer versions of practically
> > all libraries than my RH 7.2.  When I compile and run the same program
> > now, the spawned thread does not stop when a breakpoint is hit.
> > 
> > Here is the simple program:
> >    #include <stdio.h>
> >    #include <pthread.h>
> >    #include <unistd.h>
> > 
> >    static void *wait_thread(void *arg);
> > 
> >    int main(int argc, char *argv[])
> >    {
> >       printf("[ main ] Program enter.\n");
> > 
> >       pthread_t t;
> >       int res = pthread_create(&t, NULL, wait_thread, NULL);
> >       if(res != 0)
> >       {
> >          printf("[ main ] Error creating wait thread!\n");
> >       }
> > 
> >       printf("[ main ] Going to sleep...\n");
> >       sleep(3);
> >       printf("[ main ] Exitting...\n");
> > 
> >       return(0);
> >    }
> > 
> >    static void *wait_thread(void *arg)
> >    {
> >       while(1)
> >       {
> >          printf("[ wait_thread ] Waiting in thread\n");
> >          sleep(1);
> >       }
> >    }
> > 
> > 
> > Compiled with:
> >    gcc -g threadtest.c -o threadtest -lpthread
> > 
> > Here is a snippet of the debug session:
> >    nick@nimble gdbtest $ gdb threadtest
> >    GNU gdb 6.1
> >    Copyright 2004 Free Software Foundation, Inc.
> >    GDB is free software, covered by the GNU General Public License, and
> >    you are welcome to change it and/or distribute copies of it under
> >    certain conditions.
> >    Type "show copying" to see the conditions.
> >    There is absolutely no warranty for GDB.  Type "show warranty" for
> >    details.
> >    This GDB was configured as "i686-pc-linux-gnu"...Using host
> >    libthread_db library "/lib/libthread_db.so.1".
> > 
> >    (gdb) break main
> >    Breakpoint 1 at 0x8048444: file threadtest.c, line 9.
> >    (gdb) break 18
> >    Breakpoint 2 at 0x8048488: file threadtest.c, line 18.
> >    (gdb) run
> >    Starting program: /home/nick/gdbtest/threadtest
> > 
> >    Breakpoint 1, main (argc=1, argv=0xbffff6c4) at threadtest.c:9
> >    9          printf("[ main ] Program enter.\n");
> >    (gdb) n
> >    [ main ] Program enter.
> >    12         int res = pthread_create(&t, NULL, wait_thread, NULL);
> >    (gdb) n
> >    [ wait_thread ] Waiting in thread
> > 
> >    Program received signal SIG32, Real-time event 32.
> >    0x4002ba34 in pthread_getconcurrency () from /lib/libpthread.so.0
> >    (gdb) [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> >    [ wait_thread ] Waiting in thread
> > 
> > 
> > The thread's output "[ wait_thread ] Waiting in thread" continues to
> > print despite the debugger stopped (in main).
> > 
> > 
> > Version Info:
> > gdb: 6.1 (configured as "i686-pc-linux-gnu")
> > gcc: 3.3.2 (Thread model: posix, configured with --enable-threads=posix)
> > glibc:  2.3.2
> > kernel: 2.6.5 (vanilla)
> > 
> > 
> > Regards,
> > Nick
> > 
> > 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]