我有一个 Python C API 扩展模块,它偶尔会出现无意义的“MemoryError”。这显然不是模块异常处理程序处理的错误。如何获得更多信息的错误回溯,以便找出扩展模块中出了什么问题?
也许问题应该是,鉴于我确实有扩展模块源代码,我应该怎么做才能在 MS Windows 上使用 MSVC 获得它的可调试版本?
我有一个 Python C API 扩展模块,它偶尔会出现无意义的“MemoryError”。这显然不是模块异常处理程序处理的错误。如何获得更多信息的错误回溯,以便找出扩展模块中出了什么问题?
也许问题应该是,鉴于我确实有扩展模块源代码,我应该怎么做才能在 MS Windows 上使用 MSVC 获得它的可调试版本?
看起来扩展模块声称内存不足——这是真的还是假的,当然,如果不查看扩展的源代码就无法判断。万一这是真的,那么内存的稀缺性可能会阻碍回溯,一个老技巧是早点获取一些内存并在重新启动之前将其放入错误情况中,例如:
reserve = [None] * 10000
try: amodule.somecall()
except MemoryError:
del reserve
raise
这只会告诉您哪个 Python 可见函数引发了错误(以及哪个 Python 函数调用了它等)。除此之外,您需要编译扩展的 C 源代码以进行调试并使用一些工具,例如 gdb。