Когда в pdb консоли, вводя оператор, который вызывает исключение, приводит только к однострочному отслеживанию стека, например.
(Pdb) someFunc()
*** TypeError: __init__() takes exactly 2 arguments (1 given)
Однако я хотел бы выяснить где точно в someFunc
ошибка происходит. т.е. в этом случае, который класс __init__
присоединен.
Существует ли способ получить полное отслеживание стека в Pdb?
Самый простой способ - определить в коде функцию, которая вызывает someFunc () и печатает трассировку, а затем вызывает ее из Pdb.
Как вариант, вы можете распечатать трассировку самостоятельно. Учитывая этот исходный код:
def foo(a):
pass
def bar(b):
foo(b, 2)
def some_func():
bar(3)
if __name__=='__main__':
import pdb
pdb.set_trace()
Тогда мы можем сделать это:
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)