From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26273 invoked by alias); 20 May 2004 01:37:15 -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 26248 invoked from network); 20 May 2004 01:37:14 -0000 Received: from unknown (HELO mta6.srv.hcvlny.cv.net) (167.206.5.72) by sourceware.org with SMTP; 20 May 2004 01:37:14 -0000 Received: from nimble.325Bayport (ool-18b87d16.dyn.optonline.net [24.184.125.22]) by mta6.srv.hcvlny.cv.net (iPlanet Messaging Server 5.2 HotFix 1.25 (built Mar 3 2004)) with ESMTP id <0HXZ00FJ7OC11D@mta6.srv.hcvlny.cv.net> for gdb@sources.redhat.com; Wed, 19 May 2004 21:33:37 -0400 (EDT) Date: Thu, 20 May 2004 01:37:00 -0000 From: Nick NoSpam Subject: breakpoints and pthreads To: gdb@sources.redhat.com Message-id: <1085016786.25625.825.camel@nimble.325Bayport> MIME-version: 1.0 Content-type: text/plain Content-transfer-encoding: 7BIT X-SW-Source: 2004-05/txt/msg00136.txt.bz2 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