From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5625 invoked by alias); 1 Jun 2004 05:05:01 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 5598 invoked from network); 1 Jun 2004 05:05:00 -0000 Received: from unknown (HELO mta2.srv.hcvlny.cv.net) (167.206.5.68) by sourceware.org with SMTP; 1 Jun 2004 05:05:00 -0000 Received: from nimble.325Bayport (ool-18b87d16.dyn.optonline.net [24.184.125.22]) by mta2.srv.hcvlny.cv.net (iPlanet Messaging Server 5.2 HotFix 1.25 (built Mar 3 2004)) with ESMTP id <0HYM009N864BIA@mta2.srv.hcvlny.cv.net> for gdb@sources.redhat.com; Tue, 01 Jun 2004 01:04:59 -0400 (EDT) Date: Tue, 01 Jun 2004 05:05:00 -0000 From: Nick NoSpam Subject: Re: breakpoints and pthreads In-reply-to: <1085387287.19252.836.camel@nimble.325Bayport> To: gdb@sources.redhat.com Message-id: <1086066298.4790.163.camel@nimble.325Bayport> MIME-version: 1.0 Content-type: text/plain Content-transfer-encoding: 7BIT References: <1085016786.25625.825.camel@nimble.325Bayport> <1085387287.19252.836.camel@nimble.325Bayport> X-SW-Source: 2004-06/txt/msg00003.txt.bz2 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 > > #include > > #include > > > > 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 > > > > >