PDB: исключение, когда в консоли - полное отслеживание стека

Когда в pdb консоли, вводя оператор, который вызывает исключение, приводит только к однострочному отслеживанию стека, например.

(Pdb) someFunc()
*** TypeError: __init__() takes exactly 2 arguments (1 given)

Однако я хотел бы выяснить где точно в someFunc ошибка происходит. т.е. в этом случае, который класс __init__ присоединен.

Существует ли способ получить полное отслеживание стека в Pdb?

6
задан Martijn Pieters 30 March 2015 в 10:44
поделиться

1 ответ

Самый простой способ - определить в коде функцию, которая вызывает 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)
7
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: