This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Cygwin-gdb can't find linker symbol for virtual table


On Mon, 5 May 2003, Julin, Joshua wrote:

> Hey everybody,
>
> I'm getting an (incorrect?) warning in gdb whenever I try to debug classes
> with virtual functions.
> When I try to print out a member variable, gdb states "warning: can't find
> linker symbol for virtual table for `Object4' value".  It then prints out
> the member variable correctly.
>
> This behavior is isolated to my cygwin configuration; I don't get this
> warning on my Linux box.
>
> I've searched the internet for this message and can't find any
> answers...Geoff Alexander did post this question a while back to multiple
> user groups, but to no avail.  I've searched the gcc man page for 'virtual'
> but didn't find anything which would make the warning go away.
>
> This warning message is particularly annoying to me when I use insight, the
> gdb graphical debugger.  insight causes about 1 to 20 useless dialog boxes
> to popup whenever I try to 'watch' a member variable.  They all say the same
> thing: "can't find linker symbol for virtual table".
>
> Below I show some very simple code that causes this warning on my system.
> I also show what gdb commands I used to cause the warning message to appear.
>
> Thanks for any help,
> Josh Julin
>
> //----------------------------------------------------------------
> //code  (THIS CODE IS FINE, BUT CAUSES WARNING IN GDB)
> //----------------------------------------------------------------
> class Object3
> {
> public:
>     int x;
>     ~Object3() { }                // no virtual foo
> };
>
> class Object4
> {
> public:
>     int x;
>     virtual ~Object4() { }       // virtual foo
> };
>
> int main()
> {
>     Object3 * ptr3 = new Object3;
>     Object4 * ptr4 = new Object4;  // when I "watch" ptr4->x I get the
> warning
> }
>
> //----------------------------------------------------------------
> // gcc version (ON CYGWIN)
> //----------------------------------------------------------------
> gcc --version
> gcc (GCC) 3.2 20020927 (prerelease)
>
> //----------------------------------------------------------------
> // gdb session on cygwin  (NOTICE THE WARNING)
> //----------------------------------------------------------------
> GNU gdb 2003-03-03-cvs (cygwin-special)
> Copyright 2003 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-cygwin"...
> (gdb) b main
> Breakpoint 1 at 0x4010ae: file josh.cpp, line 17.
> (gdb) r
> Starting program: /home/josh/rearch/tryAgain/josh.exe
>
> Breakpoint 1, main () at josh.cpp:17
> 17          Object3 * ptr3 = new Object3;
> (gdb) n
> 18          Object4 * ptr4 = new Object4;
> (gdb) n
> 19      }
> (gdb) p ptr4->x
> warning: can't find linker symbol for virtual table for `Object4' value
> $1 = 0
> (gdb)
>
>
> //----------------------------------------------------------------
> // gdb session on linux  (EVERYTHING WORKS!)
> //----------------------------------------------------------------
> 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) b main
> Breakpoint 1 at 0x8048656: file josh.cpp, line 17.
> (gdb) r
> Starting program: /home/josh/tmp/jjj/josh
>
> Breakpoint 1, main () at josh.cpp:17
> 17          Object * ptr1 = new Object();
> (gdb) n
> 18          Object2 * ptr2 = new Object2();
> (gdb) n
> 19      }
> (gdb) p ptr2->x
> $1 = 0
> (gdb)

Josh,
First off, looks like the above gdb examples are from two different source
files.  Secondly, what exact command are you using to compile the source,
on both Linux and Cygwin?  Third, did you try "set language" in gdb?
There's also a "set print vtbl" command that might be of use.
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

Knowledge is an unending adventure at the edge of uncertainty.
  -- Leto II


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]