>>>>> "Daniel" == Daniel Jacobowitz <[EMAIL PROTECTED]> writes:

 Daniel> On Wed, May 04, 2005 at 03:53:35PM -0400, Paul Koning wrote:
 >> I'm doing some tests to see if 4.0.0 will improve our debug
 >> experience, which is mixed indeed with complex C++ code and 3.3.3.
 >> 
 >> So far it looks like things are MUCH worse.  I built my
 >> application and looked at it with GDB.  Many of the structure
 >> names are missing.
 >> 
 >> I did some checking with readelf, looking at one of the object
 >> files.  I dumped the debug data (-w) searching for the struct
 >> names in that output.  Some of them showed up, some did not.  In a
 >> bunch of cases, out of three struct types defined one right after
 >> the other in a header file, one showed up and the other two were
 >> missing.
 >> 
 >> Any ideas?

 Daniel> Are they both used and defined in the program?  Currently GCC
 Daniel> only outputs full debug info for classes at the point where
 Daniel> the key method is emitted.  There's some discussion about
 Daniel> this in the archives.

OUCH.

Some of the types in question are probably not used in the program --
they are there for debugging.  It's disturbing to see this sort of
incompatibility.

The rule for "used" clearly has problems.  One of the types missing is
a struct that is referenced by way of casts, e.g.,
  struct foo { int x; int y; };
  bar = ((struct foo *)0x1234000)->x;

and that usage apparently is not enough to get gcc 4.0.0 to drop the
definition of "struct foo" into the output.  

So what does gcc consider "use" of a type?  If the number of omissions
is small enough, I might be able to hunt them down and do a
workaround.  Then again, I'd prefer GCC to use the old rule.  It seems
reasonable to assume that, if I mention a type in the source code, I
might want to refer to it in the debugger.  If that can't be the
default, at least there should be an option to force that behavior.

           paul

Reply via email to