PDB: exception lorsque la console - full trace de la pile
Question
Quand la console pdb, en entrant une instruction qui provoque une exception dans les résultats de seulement une trace de pile à ligne unique, par exemple,
(Pdb) someFunc()
*** TypeError: __init__() takes exactly 2 arguments (1 given)
Cependant, je voudrais savoir où exactement someFunc
les erreurs est originaire. à-dire dans ce cas, à quelle classe __init__
est attaché.
Y at-il un moyen d'obtenir une trace complète de la pile dans la PDB?
La solution
La façon la plus simple serait de définir une fonction dans votre code qui appelle someFunc () et imprime le retraçage puis appeler que de PDB.
Sinon, vous pouvez imprimer le retraçage pour vous-même. Compte tenu de ce code source:
def foo(a):
pass
def bar(b):
foo(b, 2)
def some_func():
bar(3)
if __name__=='__main__':
import pdb
pdb.set_trace()
Ensuite, nous pouvons faire ceci:
C:\temp>test.py
--Return--
> c:\temp\test.py(12)<module>()->None
-> pdb.set_trace()
(Pdb) import traceback
(Pdb) exec "try: some_func()\nexcept: traceback.print_exc()"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\temp\test.py", line 8, in some_func
bar(3)
File "C:\temp\test.py", line 5, in bar
foo(b, 2)
TypeError: foo() takes exactly 1 argument (2 given)
(Pdb)
Autres conseils
supports de pdb
debug
déclarations pour appel récursif:
$ nosetests xxxx -x --pdb
-> some code line with error
(Pdb) debug os.sdfafa() # something that raises exception
ENTERING RECURSIVE DEBUGGER
> <string>(1)<module>() # new line that raised excetion
((Pdb)) # number of parentheses indicates debugger recusion depth
((Pdb)) debug os.someothersdfsdf()
ENTERING RECURSIVE DEBUGGER
> <string>(1)<module>()
(((Pdb)))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow