是否可以使用lldb.target.FindTypes()
之类的函数找到函数指针SBType而不迭代所有模块中的所有类型,因为DWARF信息似乎只包含类型的typedef?
所以在我的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()
我得到了
PythonToCppFunc
void (*)(struct _object *, void *)
void (*)(_object *, void *)
但是当我试图寻找规范类型或其名称时
script print lldb.target.FindTypes("void (*)(struct _object *, void *)").GetSize()
我得到0结果。我还尝试了上述不同空格的变体,没有struct
关键字等,没有任何结果。
我能找到的最好的方法是迭代所有模块类型并比较名称,所以这样的东西实际上有效,但速度很慢:
target.GetModuleAtIndex(i).GetTypes().GetTypeAtIndex(j).GetName() == "void (*)(_object *, void *)"
我做错了什么,或者是错误,还是不支持?