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
- To: Benjamin Kosnik <bkoz at redhat dot com>
- Subject: Re: can't find class named `foo', as given by C++ RTTI
- From: Jim Blandy <jimb at zwingli dot cygnus dot com>
- Date: 29 Jun 2001 13:16:59 -0500
- Cc: gdb at sources dot redhat dot com
- References: <200106280455.f5S4t6T07564@fillmore.constant.com>
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.