【问题标题】:Step into the non-innermost call in an expression with PDB使用 PDB 进入表达式中的非最内层调用
【发布时间】:2021-02-10 07:29:35
【问题描述】:

考虑这样一段代码:

breakpoint()
x = foo(bar(baz()))

在 PDB(或 PDB++)中,step 命令通常会进入baz() 函数。

我如何才能加入对bar()baz() 而不是baz() 的呼叫?我在 PDB 或 PDB++ 文档中没有看到任何关于此的内容。

【问题讨论】:

    标签: python pdb


    【解决方案1】:

    查看调试器命令列表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
    

    或使用return 运行直到baz 结束,然后再次使用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):
    

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多