【发布时间】:2021-02-10 07:29:35
【问题描述】:
考虑这样一段代码:
breakpoint()
x = foo(bar(baz()))
在 PDB(或 PDB++)中,step 命令通常会进入baz() 函数。
我如何才能加入对bar() 或baz() 而不是baz() 的呼叫?我在 PDB 或 PDB++ 文档中没有看到任何关于此的内容。
【问题讨论】:
考虑这样一段代码:
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
或使用return 运行直到baz 结束,然后再次使用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):
【讨论】: