C++ 当DWARF信息仅包含typedef时,在LLDB中查找函数指针SBType

C++ 当DWARF信息仅包含typedef时,在LLDB中查找函数指针SBType,c++,lldb,C++,Lldb,如果DWARF信息似乎只包含类型的typedef,那么是否可以使用类似于lldb.target.FindTypes()的方法来查找函数指针SBType,而不迭代所有模块中的所有类型 P>所以在我的C++代码中,我有: typedef struct _object { PyObject_HEAD } PyObject; typedef void (*PythonToCppFunc)(PyObject*,void*); 当我执行 script print lldb.target.FindFi

如果DWARF信息似乎只包含类型的typedef,那么是否可以使用类似于
lldb.target.FindTypes()
的方法来查找函数指针SBType,而不迭代所有模块中的所有类型

<> P>所以在我的C++代码中,我有:

typedef struct _object {
  PyObject_HEAD
} PyObject;
typedef void (*PythonToCppFunc)(PyObject*,void*);
当我执行

script print lldb.target.FindFirstType("PythonToCppFunc").GetName()
script print lldb.target.FindFirstType("PythonToCppFunc").GetCanonicalType()
script print lldb.target.FindFirstType("PythonToCppFunc").GetCanonicalType().GetName()
我明白了

但当我试图寻找规范类型或其名称时

script print lldb.target.FindTypes("void (*)(struct _object *, void *)").GetSize()
我得到0个结果。我还尝试了上面的变体,使用不同的空格,没有
struct
关键字等,但没有任何结果

我能找到的最好方法是迭代所有模块类型并比较名称,因此类似的方法实际上是可行的,但速度非常慢:

target.GetModuleAtIndex(i).GetTypes().GetTypeAtIndex(j).GetName() == "void (*)(_object *, void *)" 

我是做错了什么,还是一个bug,还是不受支持?

您如何迭代所有模块中的所有类型?我没有找到任何API来执行此操作。@random您可以使用SBTarget::GetNumModules()获取模块数,然后使用SBTarget::GetModuleAtIndex(I)进行迭代,对于调用SBModule::GetTypes()的每个模块,然后调用SBTypeList::GetTypeAtIndex()来获取实际类型。谢谢!出于某种原因,我没有注意到这个调用。您如何迭代所有模块中的所有类型?我没有找到任何API来执行此操作。@random您可以使用SBTarget::GetNumModules()获取模块数,然后使用SBTarget::GetModuleAtIndex(I)进行迭代,对于调用SBModule::GetTypes()的每个模块,然后调用SBTypeList::GetTypeAtIndex()来获取实际类型。谢谢!不知什么原因,我没有注意到那个电话。
target.GetModuleAtIndex(i).GetTypes().GetTypeAtIndex(j).GetName() == "void (*)(_object *, void *)"