0

I am writing some GDB extension using GDB Python API to be used for C++ applications.

I need to write some index over detected types in debugged process/coredump. gdb.Type class has __eq__ defined but is not hashable thus can not be used as a key in dict or set.

The workaround I am trying to implement is to get unique identifiers for gdb.Type objects. str(gdb_type) looks very good but this solution is not bulletproof as some types are nameless, for instance take a loot at this one:

typedef struct {
} typedeffed_enum;

For this one expression str(gdb.lookup_type('typedeffed_enum').strip_typedefs()) will evaluate to 'struct {...}' (at least for my compiler and gdb) which is totally not unique.

Such types also have gdb_type.name is None names so this is not perfect too.

id(gdb_type) may give different values for same types as gdb.Type objects are not unique for each C++ type. So this does not work at all.

Another idea was to get the location (filename and line number) where a type was defined but I could not find a way to get a type's symbol. If you know how to do it, please share.

Is there any way to identify a gdb.Type with compareable and hasheble value?

PS Edited little bit to make the example more precise.

tldr
  • 11
  • 1

0 Answers0