This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: can't find class named `foo', as given by C++ RTTI
Jim Blandy <jimb@zwingli.cygnus.com> writes:
> Benjamin Kosnik <bkoz@redhat.com> writes:
>> This is a new class of errors that I've started seeing recently. I'm
>> getting this from debugging efforts on x86/linux with current CVS
>> 'src' and 'gcc' modules. For what it's worth, both --with-dwarf2 and
>> default toolchains have the same error.
>>
>>
>> (gdb) p *__fp
>> can't find class named `std::numpunct<char>', as given by C++ RTTI
>
> This means is that GDB wanted to find the run-time type of some object
> (probably *__fp), and failed. Here's how GDB tries to find an
> object's run-time type:
> - GDB extracts the object's vtable.
> - it looks up the linker symbol naming the vtable (which was
> _ZTVSt8numpunct, or something like that).
> - it demangles that name (and got "vtable for std::numpunct")
> - it pulls off the "vtable for " part
> - it tries to look up the type name (in this case, "std::numpunct") in
> its full symbol table
>
> In this case, GDB wasn't able to find the name std::numpunct.
>
> Probably GDB should have been able to find std::numpunct. But does
> the rest of the process look reasonable? That is, was the run-time
> type of *__fp indeed `std::numpunct'? The output from `ptype'
> suggests that its compile-time type is `class facet'. Perhaps
> something went wrong well before we ever tried to look up the type
> name.
Nope. The name of the type in the symbol table is numpunct<char>,
because of scoping problems.
--
"A friend of mine once sent me a post card with a picture of the
entire planet Earth taken from space. On the back it said,
"Wish you were here."
"-Steven Wright