通常,当我逐步遍历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。为了使它们运行起来,直到从它们那里回来。以“仅”两个函数作为参数,这仍然可能会带来相对的不便。

您还可以通过有条件地扩展断点的想法,例如如果您知道只想在foo赋值为1后调试x

b foo, x == 1


这样,您可以在代码中运行(或n(ext)),并使断点仅在满足条件时触发。

关于python - 当同一行上有多个被调用时,如何进入PDB中的特定可调用对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59866604/

10-12 17:02