【发布时间】:2013-09-17 13:27:46
【问题描述】:
我正在使用 pdb 调试程序。我连续点击'c'来运行代码,并且在每一步pdb都会告诉我执行了哪一行。
假设我们有这个代码:
def foo(bar):
print(bar)
foo('hey')
首先,第 4 行调用函数 foo。然后 pdb 向我显示该行
def foo(bar)
被执行。
为什么?那条线不只是一种标签吗?在执行“print(bar)”之前会发生什么? (伴随着另一个“命中”)
编辑:我尝试过实际检查定义。事实上,如果 foo 是一个生成器(不能以这种方式调用),python 仍然会到达那里,然后决定将其视为一个生成器(或视情况而定的一个函数..)。
【问题讨论】:
-
好问题!我期待着阅读答案。不过,我想说的是,如果它确实跳过了,那就更令人惊讶了。它还能如何验证参数等? (如果它跳过,如果你打电话给
foo(1, 2),它怎么知道抱怨?) -
是的,但我需要确切地知道那里发生了什么。您@rogaos 可能是对的。但是,如果您建议 pdb 在 foo(1,2) 处停止执行并且永远不会到达 def 行。因此,当我们看到 def 行时,它已经接受/匹配了该函数。请注意,下一个's'命中到达打印行,并且一如既往地在执行该行之前停止。因此,您可以在函数发生任何事情之前检查堆栈/堆。
标签: python python-2.7 pdb