问题描述
考虑这样一段代码:
breakpoint()
x = foo(bar(baz()))
在 PDB(或 PDB++)中,step
命令通常会进入 baz()
函数。
如何介入对 bar()
或 baz()
而不是 baz()
的调用?我在 PDB 或 PDB++ 文档中没有看到任何关于此的内容。
解决方法
查看调试器命令列表 here。
您可以在 foo 或 bar 中使用 break
放置断点或使用 tbreak
放置临时断点:
$ python3 x.py
> /tmp/0/x.py(14)<module>()
-> x=foo(bar(baz(42)))
(Pdb) break foo
Breakpoint 1 at /tmp/0/x.py:1
(Pdb) continue
> /tmp/0/x.py(2)foo()
-> ret=x+1
或者使用 baz
运行直到 return
结束,然后再次使用 step
:
$ python3 x.py
> /tmp/0/x.py(14)<module>()
-> x=foo(bar(baz(42)))
(Pdb) step
--Call--
> /tmp/0/x.py(9)baz()
-> def baz(x):
(Pdb) return
--Return--
> /tmp/0/x.py(11)baz()->45
-> return ret
(Pdb) step
--Call--
> /tmp/0/x.py(5)bar()
-> def bar(x):
(Pdb) return
--Return--
> /tmp/0/x.py(7)bar()->47
-> return ret
(Pdb) step
--Call--
> /tmp/0/x.py(1)foo()
-> def foo(x):