IPythonセッションがあり、そこからスクリプトを呼び出すとします。
_> run my_script.py
_
_my_script.py
_にブレークポイントを誘導して、IPythonからワークスペースを検査する方法はありますか?
以前のバージョンのIPythonでできることを読んだことを覚えています。
_from IPython.Debugger import Tracer;
def my_function():
x = 5
Tracer()
print 5;
_
しかし、サブモジュールDebugger
はもう利用できないようです。
IPythonセッションが既に開いていると仮定します。どのようにしてプログラムを選択した場所で停止し、IPythonでワークスペースを検査できますか?
一般に、上記のTracer()
の呼び出しを複数回行い、行番号を追跡する必要がないため、行番号を事前に指定する必要のないソリューションを好むでしょう。彼らはどこにいますか。
Tracer()
はipythonの別のモジュールにまだ存在しています。次のことができます。
_from IPython.core.debugger import Tracer
def my_function():
x = 5
Tracer()()
print 5
_
Tracer
を囲む追加の呼び出し括弧に注意してください。
edit:IPython 6以降の場合Tracer
非推奨 したがって、set_trace()
を使用する必要があります代わりに:
_from IPython.core.debugger import set_trace
def my_function():
x = 5
set_trace()
print 5
_
あなたはそれを実行し、与えられた行にブレークポイントを設定することができます:
run -d -b12 myscript
-b12は12行目にブレークポイントを設定します。この行に入ると、すぐにpdbにドロップし、c
と入力してそのブレークポイントまで実行する必要があります。
これは、非推奨のset_trace()
メソッドの代わりにTracer()
メソッドを使用したバージョンです。
from IPython.core.debugger import Pdb
def my_function():
x = 5
Pdb().set_trace()
print 5
IPythonシェル内では、次のことができます
_from IPython.core.debugger import Pdb
pdb = Pdb()
pdb.runcall(my_function)
_
たとえば、または関数内で通常のpdb.set_trace()
を実行します。
私はいつも同じ質問をしてきましたが、私が見つけた最高の回避策は、かなりコードが壊れる行を追加することです:
...
a = 1+2
STOP
...
その後、そのコードを実行すると壊れます。%debugを実行すると、そこに移動して検査できます。また、%pdbをオンにして、常にコードが破損する箇所を指すようにすることもできますが、どこでも、コードが破損するたびに検査したくない場合、これは面倒です。もっとエレガントなソリューションが欲しいです。