From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14404 invoked by alias); 20 Jan 2003 15:32:46 -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 14350 invoked from network); 20 Jan 2003 15:32:45 -0000 Received: from unknown (HELO relay.versatel.net) (62.250.3.110) by 172.16.49.205 with SMTP; 20 Jan 2003 15:32:45 -0000 Received: (qmail 95919 invoked from network); 20 Jan 2003 15:32:44 -0000 Received: from unknown (HELO technt.technolution.nl) (62.58.167.162) by relay.versatel.net with SMTP; 20 Jan 2003 15:32:44 -0000 Received: from frank (172.16.10.11) by technt.technolution.nl (Worldmail 1.3.167) for gdb@sources.redhat.com; 20 Jan 2003 16:32:41 +0100 Reply-To: From: "Frank van Eijkelenburg" To: "Gnu Debugger mailing list" Subject: multithreading and gdbserver Date: Mon, 20 Jan 2003 15:32:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700 X-SW-Source: 2003-01/txt/msg00345.txt.bz2 Hi, I was wondering if there is anyone who tried remote debbuging a multithreaded program. I'm using gdb 5.3. I've two linux machines with redhat installed. If I run gdb and debug a simple multithreaded program (which is linked against the libpthread library), everything is okay: [frank@frankVMLinux gdb]$ ./gdb -nx /home/frank/tmp/example_i686/ex1 GNU gdb 5.3 Copyright 2002 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"... (gdb) list 17 return NULL; 18 } 19 20 int main(void) 21 { 22 int retcode; 23 pthread_t th_a, th_b; 24 void * retval; 25 26 retcode = pthread_create(&th_a, NULL, process, (void *) "a"); (gdb) b 26 Breakpoint 1 at 0x80485d2: file ex1.c, line 26. (gdb) run Starting program: /home/frank/tmp/example_i686/ex1 [New Thread 1024 (LWP 5394)] [Switching to Thread 1024 (LWP 5394)] Breakpoint 1, main () at ex1.c:26 26 retcode = pthread_create(&th_a, NULL, process, (void *) "a"); (gdb) n [New Thread 2049 (LWP 5395)] [New Thread 1026 (LWP 5396)] Starting process a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa27 if (retcode != 0) fprintf(stderr, "create a failed %d\n", retcode); (gdb) info threads 3 Thread 1026 (LWP 5396) 0x4011e584 in __libc_write () at __libc_write:-1 2 Thread 2049 (LWP 5395) 0x401239f7 in __poll (fds=0x804b72c, nfds=1, timeout=2000) at ../sysdeps/unix/sysv/linux/poll.c:63 * 1 Thread 1024 (LWP 5394) main () at ex1.c:27 (gdb) But when I try to debug the same application remote, I can't see any information about the threads anymore. So, did anyone tried this before? Output with remote debugging: On REMOTE machine: [frank@vmware frank]$ ./gdbserver host:5555 ex1 Process ex1 created; pid = 1034 Remote debugging from host 172.16.10.119 On HOST machine: [frank@frankVMLinux gdb]$ ./gdb -nx /home/frank/tmp/example_i686/ex1 GNU gdb 5.3 Copyright 2002 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"... (gdb) target remote 172.16.10.147:5555 Remote debugging using 172.16.10.147:5555 0x40001e20 in ?? () (gdb) list 17 return NULL; 18 } 19 20 int main(void) 21 { 22 int retcode; 23 pthread_t th_a, th_b; 24 void * retval; 25 26 retcode = pthread_create(&th_a, NULL, process, (void *) "a"); (gdb) b 26 Breakpoint 1 at 0x80485d2: file ex1.c, line 26. (gdb) handle SIG32 nostop Signal Stop Print Pass to program Description SIG32 No Yes Yes Real-time event 32 (gdb) handle SIG32 noprint Signal Stop Print Pass to program Description SIG32 No No Yes Real-time event 32 (gdb) c Continuing. Breakpoint 1, main () at ex1.c:26 26 retcode = pthread_create(&th_a, NULL, process, (void *) "a"); (gdb) n 27 if (retcode != 0) fprintf(stderr, "create a failed %d\n", retcode); (gdb) n 28 retcode = pthread_create(&th_b, NULL, process, (void *) "b"); (gdb) info threads 1 Thread 1034 main () at ex1.c:28 (gdb) n 29 if (retcode != 0) fprintf(stderr, "create b failed %d\n", retcode); (gdb) n 30 retcode = pthread_join(th_a, &retval); (gdb) n 31 if (retcode != 0) fprintf(stderr, "join a failed %d\n", retcode); (gdb) n 32 retcode = pthread_join(th_b, &retval); (gdb) n 33 if (retcode != 0) fprintf(stderr, "join b failed %d\n", retcode); (gdb) n 34 return 0; (gdb) info threads 1 Thread 1034 main () at ex1.c:34 (gdb) c Continuing. Program exited normally. (gdb) As you can see, there is no information about other threads (except the main thread). It also didn't tell the user that a thread is created. Why is this in the first case working and with remote debugging not anymore. If somebody can explain this, I would really appreciate that... TIA, Frank