iPython 调试器不提供任何见解



假设我有以下函数:

def simple_func():
    a = 4
    b = 5
    c = a * b
    print c

这是我运行%debug simple_func()时得到的:

NOTE: Enter 'c' at the ipdb>  prompt to continue execution.
None
> <string>(1)<module>()
ipdb>

如果我输入n调试器会向我吐出 20 并返回None .

这是跨功能、解释器、机器等所发生情况的简化版本。这是怎么回事?为什么我不能让我的任何调试器做我想做的事情,而我只需要做一些非常简单的逐行单步执行?

看起来debug不适用于在ipython会话中简单地定义的函数。 它需要从文件导入(即,--breakpoint 参数采用文件名和行)。

如果我创建一个文件test.py

In [9]: cat test.py
def simple_func():
    a = 4
    b = 5
    c = a * b
    print(c)

我可以做:

In [10]: import test
In [11]: %debug --breakpoint test.py:1 test.simple_func()
Breakpoint 1 at /home/paul/mypy/test.py:1
NOTE: Enter 'c' at the ipdb>  prompt to continue execution.
> /home/paul/mypy/test.py(2)simple_func()
1     1 def simple_func():
----> 2     a = 4
      3     b = 5
      4     c = a * b
      5     print(c)
ipdb> n
> /home/paul/mypy/test.py(3)simple_func()
1     1 def simple_func():
      2     a = 4
----> 3     b = 5
      4     c = a * b
      5     print(c)
ipdb> n
> /home/paul/mypy/test.py(4)simple_func()
      2     a = 4
      3     b = 5
----> 4     c = a * b
      5     print(c)
      6 
ipdb> a,b
(4, 5)
ipdb> n
> /home/paul/mypy/test.py(5)simple_func()
      2     a = 4
      3     b = 5
      4     c = a * b
----> 5     print(c)
      6 
ipdb> c
20
ipdb> c
20
ipdb> q

可能还有其他方法可以使用它,但这似乎是最简单、最直接的一种。 我很少使用调试器。 相反,我在 Ipython 中交互式测试代码片段,并在脚本中撒上调试prints

相关内容

  • 没有找到相关文章

最新更新