2012-09-28 11 views
29

ipythonの関数の最初の行にステップインする方法はありますか?私は次のようになり、何かを想像:ipdbを実行し、fooの最初の行にブレークポイントを設定しますIPythonの関数に入る

%step foo(1, 2) 

これを今実行したい場合は、関数のソースコードに移動し、import ipdb; ipdb.set_trace()行を追加する必要があります。

+1

'%step'のような機能はありません。スクリプト全体を '%run -d'することはできますが、単一の文や関数呼び出しに対して同じことをすることはできません。 'pdb.run(" foo(1、2) ")'または 'pdb.runcall(foo、1,2)'を手動で行うことができます。 – abarnert

+0

私は今日も同じことを考えていました。それが利用可能なら、私はこれをいつも使っています。それがどのように実装されるかを見るためにiPythonソースを掘り下げる時間。 –

+0

[IPythonでコマンドを実行することは可能ですか?](https://stackoverflow.com/questions/9689378/is-it-possible-to-run-commands-in-ipython-with-debugging) –

答えて

42

ipdbは、今年の初めから0.7からruncall、runeval、runをサポートしています。 pdb.runcallのように使うことができます:

In [1]: def foo(a, b): 
    ...:  print a + b 
    ...: 

In [2]: import ipdb 

In [3]: ipdb.runcall(foo, 1, 2) 
> <ipython-input-1-2e565fd9c4a4>(2)foo() 
     1 def foo(a, b): 
----> 2  print a + b 
     3 

ipdb> 
+0

それは私が必要とするものです。 0.7のアップデートを指摘してくれてありがとう、私は古いバージョンがあった。これで、おそらくruncallを使うipythonの魔法を追加するのは簡単でしょう。 –

+8

実際には、外部のipdbは必要ありません。IPython.core.debugger import Pdbから 'を実行するだけです。 ipdb = Pdb() 'となります。 –

+1

最も洗練された方法ではありません。私はそのような共通の必要性のために魔法の機能を期待しました。 SciPyユーザーのための共通のニーズではないのだろうか... –

関連する問題