2010-04-06 6 views
1

J'ai un module d'extension d'API Python C qui tombe de temps en temps avec un "MemoryError" non-informatif. Il ne s'agit clairement pas d'une erreur prise en charge par les gestionnaires d'exceptions du module. Comment obtenir une trace d'erreur plus informative pour que je puisse comprendre ce qui ne va pas dans le module d'extension?Récupération de trace à partir de l'API Python C

Peut-être la question devrait être, étant donné que j'ai le code source du module d'extension, que dois-je faire pour obtenir une version débogeable de MSVC sur MS Windows?

Répondre

2

On dirait que le module d'extension prétend être hors de la mémoire - que ce soit vrai ou faux, bien sûr, il est impossible de dire sans regarder les sources de l'extension. Juste au cas où il est vrai, de sorte que la rareté de la mémoire pourrait empêcher un retraçage, un vieux truc est d'obtenir une mémoire plus tôt et déposez-le dans le cas d'erreur avant reraising il, par exemple:

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

Ce ne sera pas vous en dire beaucoup plus que quelle fonction Python-visible a déclenché l'erreur (et quelle fonction Python l'a appelée, etc.). Pour aller au-delà, vous devrez compiler les sources C de l'extension pour le débogage et utiliser des outils tels que gdb.

+0

Oui, vous avez raison. J'ai édité ma question. Ce que je veux réellement faire est de déboguer le module étant donné que je sais quel appel python a déclenché cette erreur. – TheObserver

Questions connexes