This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: breakpoints and pthreads
- From: Nick NoSpam <nicknospam at optonline dot net>
- To: gdb at sources dot redhat dot com
- Date: Tue, 01 Jun 2004 01:04:58 -0400
- Subject: Re: breakpoints and pthreads
- References: <1085016786.25625.825.camel@nimble.325Bayport><1085387287.19252.836.camel@nimble.325Bayport>
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
> >
> >
>