PDB:在控制台中的异常 - 完整堆栈跟踪

Eog*_*anM 6 python pdb

在pdb控制台时,输入导致异常的语句只会导致单个行堆栈跟踪,例如

(Pdb) someFunc()
*** TypeError: __init__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

但是,我想弄清楚someFunc错误的确切位置.即在这种情况下,__init__附加哪个类.

有没有办法在Pdb中获得完整的堆栈跟踪?

Dun*_*can 7

最简单的方法是在代码中定义一个函数,调用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()
Run Code Online (Sandbox Code Playgroud)

然后我们可以这样做:

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)
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法自动完成? (6认同)