Я пытаюсь реализовать помощник по отладке, который должен привести в порядок узел xml. Я использую интерфейс Python GDB 7.2s, чтобы сделать это. Идея состоит в том, чтобы получить адрес узла, а затем передать его в библиотеку xml с помощью ctypes.
Мне удалось получить адрес узлов 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)
Обычно это приводит к сбою GDB в xmlNodeDump. Есть намеки на то, что я делаю не так?