This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: When to emit C++ debug info?
- From: "B. Kosnik" <bkoz at nabi dot net>
- To: drow at mvista dot com, snyder at fnal dot gov
- Cc: gcc at gcc dot gnu dot org
- Date: Sat, 3 Jan 2004 12:02:50 -0600
- Subject: Re: When to emit C++ debug info?
I cannot resist replying to this...
namespace b_std
{
class b_ostream {
public:
int foo;
virtual void bar();
b_ostream& operator << (const char *);
};
extern b_ostream b_cout;
}
int main()
{
b_std::b_cout << "Hello world";
}
> The question arises, what debug information should be emitted for this?
Well, I suspect that somebody debugging this would want:
1) main
2) b_std::b_ostream that can be examined with
(gdb) p b_cout
(or, in some future, better world)
(gdb) p b_std::b_cout
3) b_std::b_ostream::operator<<(const char*) definition, if it existed
As you noticed, mainline g++ doesn't do this. (No difference between g++
-g, g++ -ggdb3, g++ -g3 -O0 -fno-eliminate-unused-debug-types). The fact
that a used variable (b_cout) doesn't have a DW_TAG_variable is a bug, I
think, and should be filed in bugzilla. I would think the structure_type
tag would fall out correctly if the variable tag was emitted.
The Bugzilla entry somewhat associated with this kind of thing involves
nested types. It's debug/11325, and was fixed by Scott Synder.
> The debug information is keyed to the vtable at the moment.
This will result in problems for libstdc++ templatized classes, because
of the "extern template" suppression of explicitly instantiated
templates.
> This means that, even now that GDB can handle trivial uses of namespace
> information, real-world examples are pretty much useless.
real world examples are "less than optimally" debugged.
:-)
-benjamin