gdb在动态库中断

时间:2016-09-20 15:47:59

标签: python c dll gdb

我正在尝试使用ctypes访问python中的动态库。 到目前为止,我已经在python中创建了一堆结构来反映库中的结构类型。我现在正试图测试这些结构,看看我是否已正确翻译了所有内容。我目前有类似以下设置的内容

import ctypes as ct

class MyStruct(ct.Structure)
    ''' put the actual implementation here '''
    pass

if __name__ == "__main__":
    mylib = ct.CDLL('/path/to/mylib.dylib')

    loadFile = mylib.loadFile

    loadFile.restype = ct.Pointer(MyStruct)

    parent = MyStruct()

    file = b"/path/to/file"

    child = loadFile(file, ct.byref(parent))

    print(child)

现在,出于某种原因,当我尝试运行此代码时,这会在动态库中发生段错误。我试图确定这种情况发生的位置(以及原因)。我已经使用调试信息编译了库和我的python可执行文件,现在我正在尝试使用gdb来查找问题。我可以启动我的程序并在loadFile内的一行中非常好地打破

gdb b loading.c:172
gdb r

和gdb中断。现在,还有另一个函数调用(此函数也是动态库的一部分),它在我想要进入的loading.c的第172行。我试图打破其他功能

gdb b foo.c:636

但是gdb一直在给我

Cannot access memory at address 0x2860

错误。此外,如果我只是在第172行中断,然后使用stepi,那么我无法获得任何调试信息。有没有办法进入这个其他功能,或者是使用动态库时gdb的限制。

0 个答案:

没有答案