From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22729 invoked by alias); 31 Mar 2006 09:51:06 -0000 Received: (qmail 22718 invoked by uid 22791); 31 Mar 2006 09:51:04 -0000 X-Spam-Check-By: sourceware.org Received: from 203.197.88.2.ILL-PUNE.static.vsnl.net.in (HELO marvin.codito.net) (203.197.88.2) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 31 Mar 2006 09:51:00 +0000 Received: from ramanal.codito.co.in ([220.225.32.98]) (authenticated bits=0) by marvin.codito.net (8.13.5/8.13.5/Debian-3) with ESMTP id k2V9XwH6028959 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NOT); Fri, 31 Mar 2006 15:03:59 +0530 Subject: Re: scope in nested function From: Ramana Radhakrishnan Reply-To: ramana.radhakrishnan@codito.com To: Bill Pursell Cc: gdb@sourceware.org, jimb@red-bean.com In-Reply-To: <442CC4BB.5070709@gmail.com> References: <442CC4BB.5070709@gmail.com> Content-Type: text/plain Date: Fri, 31 Mar 2006 13:59:00 -0000 Message-Id: <1143797489.7516.31.camel@localhost.localdomain> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2006-03/txt/msg00233.txt.bz2 Is this something gdb was never designed to do ? A quick search in the doco didn't reveal anything for me . The only reference is that of Pascal programs not supporting debug for nested functions. ramana@arnor:~$ arm-none-eabi-gcc -v Using built-in specs. Target: arm-none-eabi Configured with: /mnt/tools/fsf/build/combined-arm-none-eabi-svn-4-1-branch-2006-03-30/configure --target=arm-none-eabi --prefix=/mnt/tools/fsf/install/arm-none-eabi-svn-4-1-branch-2006-03-30 --enable-languages=c --disable-nls --with-newlib --disable-gdbtk --disable-libssp Thread model: single gcc version 4.1.1 20060330 (prerelease) ramana@arnor:~$ arm-none-eabi-gcc -g nestedfns.c ramana@arnor:~$ arm-none-eabi-gdb a.out GNU gdb 6.4.50.20060103-cvs Copyright (C) 2006 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 "--host=i686-pc-linux-gnu --target=arm-none-eabi".../home/ramana/.gdbinit:1: Error in sourced command file: Junk in argument list: " brkoninsnraw" (gdb) b main::foo Can't find member of namespace, class, struct, or union named "main::foo" Hint: try 'main::foo or 'main::foo (Note leading single quote.) (gdb) b foo Function "foo" not defined. Make breakpoint pending on future shared library load? (y or [n]) n (gdb) b foo.1958 Can't find member of namespace, class, struct, or union named "foo.1958" Hint: try 'foo.1958 or 'foo.1958 (Note leading single quote.) (gdb) Is gdb even designed to do this. ? A google reveals this thread where a user has mentioned problems with nested functions . The mechanism though which is used is only using line numbers .... so .... we don't really know if it was ever designed to work ! http://sourceware.org/ml/gdb/2005-02/msg00141.html cheers Ramana On Fri, 2006-03-31 at 06:57 +0100, Bill Pursell wrote: > I'm not sure how to reference a variable in a nested function from gdb. > In the gdb session below, there are 2 things I don't understand > how to do: > > 1) how do I set a breakpoint in foo? (other than by referencing a line > number) > 2) when I'm in foo, how do I reference i? > > > #include > > int > main() > { > auto void foo(void); > int i = 0; > foo(); > return 0; > > void foo(void) { > i += 1; > } > } > > > > > (gdb) b main > Breakpoint 1 at 0x8048361: file d.c, line 7. > (gdb) run > Starting program: /home/bill/tmp/a.out > > Breakpoint 1, main () at d.c:7 > 7 int i = 0; > (gdb) b foo > Function "foo" not defined. > Make breakpoint pending on future shared library load? (y or [n]) n > (gdb) n > 8 foo(); > (gdb) s > foo.0 () at d.c:11 > 11 void foo(void) { > (gdb) p i > No symbol "i" in current context. > (gdb) n > 12 i += 1; > (gdb) cont > Continuing. > > Program exited normally. -- Ramana Radhakrishnan GNU Tools codito ergo sum (http://www.codito.com)