2010-04-06 149 views
1

我有一个Python C API扩展模块,偶尔会遇到一个无用的“MemoryError”。这显然不是模块的异常处理程序迎合的错误。如何获得更丰富的错误回溯信息,以便我可以找出扩展模块中出现了什么问题?从Python获取回溯C API

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

回答

2

看起来扩展模块声称内存不足 - 无论是真的还是假的,当然,如果不查看扩展的来源,这是不可能分辨的。万一这是真的,这样的内存短缺可能阻碍回溯,一个老把戏是让一些内存早些时候reraising之前放弃它在错误的情况下,例如:

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

这不会告诉你比哪个Python可见的函数引发的错误更多(以及Python函数称之为什么等)。为了超越这一点,您需要编译扩展的C源代码进行调试,并使用一些工具(如gdb)。

+0

是的,你是对的。我编辑了我的问题。我真正想要做的是调试模块,因为我知道哪个python调用触发了该错误。 – TheObserver 2010-04-06 00:57:31