Re: Types prefixed by "class" or "struct" string??

Paul Smith <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On Fri, 2020-02-21 at 09:55 -0500, Paul Koning wrote:
> > But, if I try to look up the type including the "class " it
> > definitely fails:
> 
> Well, sure.  "class" is not part of the name of the type.

Heh.  Well, clearly :).  I think I didn't make something clear in my
initial message: it's not *ME* that's providing the "class " prefix:
GDB is doing that itself.  That's the problem: it's adding this prefix
to the names of types, then when it tries to look them up it fails.

However I've discovered the culprit, although I still can't understand
why I never saw this before / what could have changed.

Basically, if you evaluate a gdb.Type in a string context GDB adds the
"class" or "struct" prefix; I guess that's part of the __str__
representation for the gdb.Type class?

Example:

  (gdb) python
  > o = gdb.convenience_variable('o')
  > print o['pending'].type
  > ^D
  class std::__cxx11::list<Object::Pending, std::allocator<Object::Pending> >

But if I use the .name attribute, then I don't get the prefix:

  (gdb) python
  > o = gdb.convenience_variable('o')
  > print o['pending'].type.name
  > ^D
  std::__cxx11::list<Object::Pending, std::allocator<Object::Pending> >

Unfortunately the Python macros that come with GCC's STL use the string
conversion in the pretty-printer code; for example:

  def find_type(orig, name):
      typ = orig.strip_typedefs()
      while True:
          # Strip cv-qualifiers.  PR 67440.
          search = '%s::%s' % (typ.unqualified(), name)

If this used type.unqualified().name instead it would probably be OK.

But, this kind of thing is done EVERYWHERE in the GCC pretty-printers
so it can't possibly have always been this way or nothing would work!!

I simply don't understand how I could have not run into such a
fundamental issue before: as I said I've been using all these same
versions, built locally and checked into Git, for well over a year now.

Has GDB always provided this "class" / "struct" prefix in the __str__
representation of gdb.Type?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.