我正在尝试实现一个调试助手,它应该将xml节点字符串化。我正在使用gdb 7.2的python接口来完成这个任务。思路是获取节点地址,然后通过ctypes将其传递到xml库中。
我已经成功获取了xml节点的地址(gdb.Value),并且可以在xml库中调用函数。但不知何故,问题始终无法解决。
这通常会导致我在xmlNodeDump处出现gdb崩溃。有什么提示可以告诉我我做错了什么吗?
我已经成功获取了xml节点的地址(gdb.Value),并且可以在xml库中调用函数。但不知何故,问题始终无法解决。
// prototype of functions to call
int xmlNodeDump (xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, int format);
xmlBufferPtr xmlBufferCreate(void);
这是Python调用该函数的部分:
# this is xmlBuffer
class lxmlBufferStruct(Structure):
_fields_ = [('content', POINTER(c_ubyte)),
('use', c_uint), ('size', c_uint),
('alloc', c_int), ('contentIO', POINTER(c_ubyte))]
pNode # gdb.Value containing the addr of xmlNodePtr cur
pDoc # gdb.Value containing addr of xmlDocPtr doc
libxml2 = CDLL('libxml2.so.2')
xmlBufferCreate = libxml2.xmlBufferCreate
xmlBufferCreate.restype = POINTER(lxmlBufferStruct)
xmlBuf = xmlBufferCreate()
libxml2.xmlNodeDump(buf, c_void_p(int(str(pDoc), 16)),
c_void_p(int(str(pNode), 16)), 0, 0)
这通常会导致我在xmlNodeDump处出现gdb崩溃。有什么提示可以告诉我我做错了什么吗?