From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18531 invoked by alias); 24 May 2004 09:22:55 -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 18507 invoked from network); 24 May 2004 09:22:53 -0000 Received: from unknown (HELO mta9.srv.hcvlny.cv.net) (167.206.5.42) by sourceware.org with SMTP; 24 May 2004 09:22:53 -0000 Received: from nimble.325Bayport (ool-18b87d16.dyn.optonline.net [24.184.125.22]) by mta9.srv.hcvlny.cv.net (iPlanet Messaging Server 5.2 HotFix 1.25 (built Mar 3 2004)) with ESMTP id <0HY700J5GM6CD5@mta9.srv.hcvlny.cv.net> for gdb@sources.redhat.com; Mon, 24 May 2004 04:27:49 -0400 (EDT) Date: Mon, 24 May 2004 09:22:00 -0000 From: Nick NoSpam Subject: Re: breakpoints and pthreads In-reply-to: <1085016786.25625.825.camel@nimble.325Bayport> To: gdb@sources.redhat.com Message-id: <1085387287.19252.836.camel@nimble.325Bayport> MIME-version: 1.0 Content-type: text/plain Content-transfer-encoding: 7BIT References: <1085016786.25625.825.camel@nimble.325Bayport> X-SW-Source: 2004-05/txt/msg00156.txt.bz2 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 > >