我正在尝试使用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的限制。