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?

Était-ce utile?

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
scroll top