当DWARF信息仅包含typedef

时间:2017-01-13 15:44:43

标签: c++ lldb

是否可以使用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 *)" 

我做错了什么,或者是错误,还是不支持?

0 个答案:

没有答案