[lldb-dev] enumerating the SBTypes from an SBModule

Greg Clayton gclayton at apple.com
Tue Jun 18 15:55:46 PDT 2013


I added the ability to get a list of types from a SBModule or SBCompileUnit. 

% svn commit
Sending        include/lldb/API/SBCompileUnit.h
Sending        include/lldb/API/SBModule.h
Sending        include/lldb/API/SBType.h
Sending        include/lldb/Core/MappedHash.h
Sending        include/lldb/Core/UniqueCStringMap.h
Sending        include/lldb/Symbol/SymbolFile.h
Sending        include/lldb/Symbol/SymbolVendor.h
Sending        include/lldb/Symbol/Type.h
Sending        include/lldb/Symbol/TypeList.h
Sending        include/lldb/lldb-enumerations.h
Sending        scripts/Python/interface/SBCompileUnit.i
Sending        scripts/Python/interface/SBModule.i
Sending        source/API/SBCompileUnit.cpp
Sending        source/API/SBModule.cpp
Sending        source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h
Sending        source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
Sending        source/Plugins/SymbolFile/DWARF/NameToDIE.h
Sending        source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
Sending        source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
Sending        source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
Sending        source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
Sending        source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
Sending        source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
Sending        source/Symbol/SymbolVendor.cpp
Sending        source/Symbol/Type.cpp
Sending        source/Symbol/TypeList.cpp
Transmitting file data ..........................
Committed revision 184251.


The new functions are:

//------------------------------------------------------------------
/// Get all types matching \a type_mask from debug info in this
/// module.
///
/// @param[in] type_mask
///     A bitfield that consists of one or more bits logically OR'ed
///     together from the lldb::TypeClass enumeration. This allows
///     you to request only structure types, or only class, struct
///     and union types. Passing in lldb::eTypeClassAny will return
///     all types found in the debug information for this module.
///
/// @return
///     A list of types in this module that match \a type_mask
//------------------------------------------------------------------
lldb::SBTypeList
SBModule::GetTypes (uint32_t type_mask)


//------------------------------------------------------------------
/// Get all types matching \a type_mask from debug info in this
/// compile unit.
///
/// @param[in] type_mask
///    A bitfield that consists of one or more bits logically OR'ed
///    together from the lldb::TypeClass enumeration. This allows
///    you to request only structure types, or only class, struct
///    and union types. Passing in lldb::eTypeClassAny will return
///    all types found in the debug information for this compile
///    unit.
///
/// @return
///    A list of types in this compile unit that match \a type_mask
//------------------------------------------------------------------
lldb::SBTypeList
SBCompileUnit::GetTypes (uint32_t type_mask = lldb::eTypeClassAny);

This lets you request types by filling out a mask that contains one or more bits from the lldb::TypeClass enumerations, so you can only get the types you really want.


Now you can do things like:

(lldb) script
module = lldb.target.module['a.out']
types = module.GetTypes()
for t in types:
  print t

Or you can iterate through the compile units and get the types for each individual compile unit:

(lldb) script
module = lldb.target.module['a.out']
for i in range(module.GetNumCompileUnits()):
  cu = module.GetCompileUnitAtIndex(i)
  types = cu.GetTypes()
  for t in types:
    print t



On Jun 17, 2013, at 6:21 PM, Sebastien Metrot <meeloo at gmail.com> wrote:

> Awesome, here is my tentative patch:
> 
> <GetAllTypes.diff>
> 
> Thanks!
> 
> S.
> 
> 
> On Jun 18, 2013, at 03:14 , Greg Clayton <gclayton at apple.com> wrote:
>> 
>> Send a patch with this function hollowed out and I will fill it in for you.
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev




More information about the lldb-dev mailing list