From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6525 invoked by alias); 29 Jul 2008 01:46:49 -0000 Received: (qmail 6516 invoked by uid 22791); 29 Jul 2008 01:46:49 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 29 Jul 2008 01:46:31 +0000 Received: (qmail 26821 invoked from network); 29 Jul 2008 01:46:29 -0000 Received: from unknown (HELO macbook-2.local) (stan@127.0.0.2) by mail.codesourcery.com with ESMTPA; 29 Jul 2008 01:46:29 -0000 Message-ID: <488E7670.40609@codesourcery.com> Date: Tue, 29 Jul 2008 02:29:00 -0000 From: Stan Shebs User-Agent: Thunderbird 2.0.0.16 (Macintosh/20080707) MIME-Version: 1.0 To: gdb@sourceware.org Subject: Multiprogram teaser Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2008-07/txt/msg00284.txt.bz2 Here's a little teaser showing the results of me flogging GDB's source code. In addition to the fun aspect of listing the main()s of two different programs, it points up the the potential confusion of having several programs in a session. What I've got so far in my prototype is the ability to collect multiple execs from the command line, the creation of "exec" objects from which you can select one as "current", and some symbol table hacking to restrict lookups to the current executable. stan@adell:~/mpgdb/linux/gdb$ ./gdb -nx ~/hello ~/goodbye GNU gdb (GDB) 6.8.50.20080728-cvs [...] Attaching objfile /home/stan/hello to exec /home/stan/hello Attaching objfile /home/stan/goodbye to exec /home/stan/goodbye (gdb) list main 1 int glob = 45; 2 3 main() { 4 mailand(); 5 foo(glob); 6 printf("goodbye cruel world\n"); 7 } 8 9 foo(int x) { 10 return x + 92; (gdb) exec /home/stan/hello Setting current exec to /home/stan/hello. (gdb) list main 3 if (bar == 0) 4 exit(1); 5 } 6 7 main() 8 { 9 bar(); 10 printf("hello world\n"); 11 } 12 (gdb) Stan