0

私が次の機能を持っているとしましょう:

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

これは、関数、インタープリター、マシンなどで何が起こっているかを簡略化したものです。何が起こっているのでしょうか? 非常に単純な行ごとのステップ実行が必要なだけなのに、デバッガーでやりたいことを実行できないのはなぜですか?

4

1 に答える 1

2

セッション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ます。

于 2016-07-15T02:40:24.817 に答える