2010-04-06 68 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