从Python C API获取回溯

时间:2010-04-06 00:29:34

标签: python python-c-api

我有一个Python C API扩展模块,偶尔会出现一个无法提供信息的“MemoryError”。这显然不是模块的异常处理程序所能满足的错误。如何获得更具信息性的错误回溯,以便我可以找出扩展模块中出了什么问题?

也许问题应该是,鉴于我确实有扩展模块源代码,我应该怎么做才能在MS Windows上使用MSVC获取它的可调试版本?

1 个答案:

答案 0 :(得分:2)

看起来扩展模块声称内存不足 - 无论是真还是假,当然,如果不查看扩展程序的来源,就无法分辨。如果它是真的,那么内存稀缺可能会妨碍追溯,一个老技巧是先提前获取一些内存并在重新启动它之前将其丢弃,例如:

reserve = [None] * 10000
try: amodule.somecall()
except MemoryError:
    del reserve
    raise

这不会告诉你更多Python-visible函数引发错误(以及Python函数调用它等)。为了超越这个范围,你需要编译扩展的C源代码进行调试,并使用一些工具,比如gdb。