当在同一行上调用多个时,如何进入 PDB 中的特定可调用对象?

How do I step into a particular callable in PDB, when there are several invoked on the same line?

当我单步执行 PDB 中的代码时,我经常遇到这样的行:

foo(bar(), qux())

在这种情况下,我有兴趣进入 foo(),但不会进入 bar()qux()

如何在 PDB 中执行此操作?

如果我只是在提示符下发出 step 命令,PDB 将跟踪到 bar(),然后是 qux(),然后才跟踪到 foo() - 这是一个当 bar()qux() 是长函数时会带来巨大的不便。

我想这就是答案,而不仅仅是评论。

当您即将 运行 线路呼叫时:

foo(bar(), qux())

使用以下方法在 foo() 上添加临时断点:

tbreak foo

然后就是:

c

continue。这将 运行 barqux 并在到达 foo 代码块后停止。

您也可以只使用常规 b(reak)

或者,您可以 s(tep) 转换为 barqux 但使用:

r

return。只是 运行 他们从他们那里回来。有"only"两个函数作为参数,可能还是比较能忍受的不便。

您还可以通过使其成为条件来扩展断点的想法,例如如果你知道你只想在 x 被赋值为 1 之后调试 foo

b foo, x == 1

这样您可以 运行(或 n(ext))通过您的代码并让断点仅在满足条件时触发。