使用 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

或者使用 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):

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...