当在同一行上调用多个时,如何进入 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
。这将 运行 bar
和 qux
并在到达 foo
代码块后停止。
您也可以只使用常规 b(reak)
。
或者,您可以 s(tep)
转换为 bar
和 qux
但使用:
r
或return
。只是 运行 他们从他们那里回来。有"only"两个函数作为参数,可能还是比较能忍受的不便。
您还可以通过使其成为条件来扩展断点的想法,例如如果你知道你只想在 x
被赋值为 1 之后调试 foo
:
b foo, x == 1
这样您可以 运行(或 n(ext)
)通过您的代码并让断点仅在满足条件时触发。
当我单步执行 PDB 中的代码时,我经常遇到这样的行:
foo(bar(), qux())
在这种情况下,我有兴趣进入 foo()
,但不会进入 bar()
或 qux()
。
如何在 PDB 中执行此操作?
如果我只是在提示符下发出 step
命令,PDB 将跟踪到 bar()
,然后是 qux()
,然后才跟踪到 foo()
- 这是一个当 bar()
和 qux()
是长函数时会带来巨大的不便。
我想这就是答案,而不仅仅是评论。
当您即将 运行 线路呼叫时:
foo(bar(), qux())
使用以下方法在 foo()
上添加临时断点:
tbreak foo
然后就是:
c
或continue
。这将 运行 bar
和 qux
并在到达 foo
代码块后停止。
您也可以只使用常规 b(reak)
。
或者,您可以 s(tep)
转换为 bar
和 qux
但使用:
r
或return
。只是 运行 他们从他们那里回来。有"only"两个函数作为参数,可能还是比较能忍受的不便。
您还可以通过使其成为条件来扩展断点的想法,例如如果你知道你只想在 x
被赋值为 1 之后调试 foo
:
b foo, x == 1
这样您可以 运行(或 n(ext)
)通过您的代码并让断点仅在满足条件时触发。