我使用pythons ctypes与C框架交互,有时在解除引用ctypes结构指针时会出现分段错误。
要调试分段错误,我决定安装并启用faulthandler。 (faulthandler在2.7中不是默认值)
但是,当我在代码中使用faulthandler.enable()运行我的代码时,它运行完美无缺。删除faulthandler.enable()会使我的分段错误再次出现。
是否有一些错误处理程序改变了python代码的执行,可以解释分段错误的消失?
修改
问题已解决,因为faulthandler会覆盖分段错误的信号,因为它仍然需要在关闭进程之前生成堆栈跟踪。
我认为SEGV已经发出信号,因为内存超出了C的范围,但尚未重新分配。内存仍然很明显,这让我仍然可以使用<pointer>.from_address
访问python中的内存,似乎因为python仍然可以访问内存值,faulthandler没有生成堆栈跟踪。
我的问题已经通过创建一个替代结构来解决,我希望它仍然可以帮助其他人遇到这个谜。