Existe-t-il un moyen pratique d'obtenir une trace de pile plus détaillée sur une exception Python? J'espère trouver un utilitaire/module wrapper ou un autre moyen d'obtenir un peu plus d'informations de la trace de la pile sans avoir à modifier le script Python qui le génère. Je voudrais être capable de l'utiliser lors de l'exécution de tests unitaires, de doctests, ou lors de l'exécution d'utilitaires ou de scripts en ligne à partir du shell. En particulier, je pense que je voudrais avoir les valeurs des variables locales, ou peut-être juste les valeurs des arguments passés à la fonction la plus interne dans la trace de la pile. Certaines options pour définir le niveau de détail seraient astucieuses.Obtenir plus de détails à partir des traces de pile
0
A
Répondre
0
Avez-vous regardé le module de retraçage?
Egalement SO:
2
ne se rapportent pas à votre problème, mais vous trouverez peut-être ce code utile - démarre automatiquement la débogueur Python lorsqu'une exception fatale se produit. Bon pour travailler avec du code interactif. Il est à l'origine de ActiveState
# code snippet, to be included in 'sitecustomize.py'
import sys
def info(type, value, tb):
if hasattr(sys, 'ps1') or not sys.stderr.isatty():
# we are in interactive mode or we don't have a tty-like
# device, so we call the default hook
sys.__excepthook__(type, value, tb)
else:
import traceback, pdb
# we are NOT in interactive mode, print the exception...
traceback.print_exception(type, value, tb)
print
# ...then start the debugger in post-mortem mode.
pdb.pm()
sys.excepthook = info
0
tel que signifié par pyfunc, vous pouvez utiliser la fonction dans le module de retraçage, mais vous obtenez seulement un stacktrace.
Si vous voulez inspecter la pile, vous devez utiliser la fonction sys.exc_info() et parcourir le membre traceback
et vider les informations de son cadre (tb_frame
). Voir le python Reference Manual pour plus d'informations sur ces types.
Voici un exemple:
def killit(a):
a[10000000000000] = 1
def test(a):
killit(a)
def iterate_traceback(tb):
while tb is not None:
yield tb
tb = tb.tb_next
try:
test(tuple())
except Exception as e:
import sys
exception_info = sys.exc_info()
traceback = exception_info[2]
for tb in iterate_traceback(traceback):
print "-" * 10
print tb.tb_frame.f_code
print tb.tb_frame.f_locals
print tb.tb_frame.f_globals
Questions connexes
- 1. Obtention automatique des traces de pile sur les systèmes Unix
- 2. Nettoyer les traces de pile dans Groovy en utilisant Eclipse?
- 3. Comment obtenir des traces de pile complètes enregistrées lorsqu'un test JUnit s'exécutant dans ant échoue?
- 4. Aide à la lecture des traces de pile ANR sous Android
- 5. décalages de mémoire Comprendre dans la pile d'iphone traces
- 6. La fenêtre Eclipse Logcat supprime les traces de pile d'exception
- 7. Niveau de pile trop profond dans Production Rails App - Comment obtenir des détails?
- 8. comment obtenir toutes les traces de la pile avec le débogueur VS 2008
- 9. COM: comment obtenir plus de détails sur les erreurs COM?
- 10. Comment obtenir plus de détails sur une compilation java
- 11. Comment obtenir la trace de la pile à partir d'erreurs dans une extension FireFox?
- 12. C# obtenir des détails de sous-classes
- 13. Comment puis-je obtenir des détails à partir des propriétés de fichier?
- 14. Qu'est-ce qui empêche UMDH de donner des traces de pile?
- 15. Référentiel de traces RTP
- 16. Comment puis-je obtenir des détails Proj4 à partir du fichier .prj du fichier de formes?
- 17. Obtenir les détails d'exception EJB à distance
- 18. Obtenir les détails de Facebook
- 19. Obtenir des valeurs à partir de l'emplacement
- 20. comment obtenir des détails d'exception de CFC fichier
- 21. Voir des traces de débogage sans débogueur?
- 22. WSS: Détermination des détails de la base de données de configuration à partir de l'objet SPFarm
- 23. Pourquoi les traces de ma pile d'exceptions pointent-elles toujours vers la dernière ligne de méthode?
- 24. Comment obtenir la pile de pile dans un appareil mobile?
- 25. Rails/Ruby: Un moyen de raccourcir les traces de la pile?
- 26. Extjs - Obtenir plus à partir du serveur
- 27. Détails du plus bas niveau de x86
- 28. plus de détails dans la console Jboss?
- 29. drupal ouvrir ID - comment obtenir des détails
- 30. Comment obtenir des détails de fichier mp3 à partir du fichier de dossiers à distance en utilisant php?
Hey, merci pour cela. J'ai fini par emballer votre code dans un [module] (http://pypi.python.org/pypi/coroner) pour le rendre commode d'invoquer le débogage de pdb avec 'python -m coroner some_script.py'. Umm, j'espère que ça va? Je vous ai donné l'attribution dans les docs. Je vais probablement changer le module plus tard pour cracher des traces de pile comme je les veux, donc je n'ai pas besoin de les extraire avec pdb, et donc je peux l'utiliser pour des tests unitaires et autres. En attendant, cependant, cela pourrait être utile à quelqu'un. – intuited
Hey, vous pouvez le faire avec 'ipython' aussi, je viens de réaliser. Vous passez l'option '-pdb' avant de passer' -c ... 'ou un nom de fichier. Il ne semble pas supporter '-m ...' mais peut-être pourrait-on le faire en passant '/ usr/lib/python ../runpy.py' comme nom de fichier. – intuited