>>>>> "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