手法 - remote pdb python




PythonとIPythonのブレークポイントによるインタラクティブなデバッグ (4)

IPythonセッションがあるとします。このセッションからスクリプトを呼び出します。

> run my_script.py

IPythonから私のワークスペースを調べることができるmy_script.pyブレークポイントを誘導する方法はありますか?

以前のバージョンのIPythonでこれを読むことができました:

from IPython.Debugger import Tracer;     

def my_function():
    x = 5
    Tracer()
    print 5;

サブモジュールDebuggerはもう使用できないようです。

すでにIPythonセッションを開いていると仮定します。自分のプログラムを自分の選択した場所で停止し、IPythonで自分のワークスペースを調べるにはどうすればいいですか?

一般的には、上記のTracer()への呼び出しを2つ以上持ち、行番号を追跡する必要がないので、私は行番号をあらかじめ指定する必要がないソリューションを好むでしょう。


IPythonシェルの内部で行うことができます

from IPython.core.debugger import Pdb
pdb = Pdb()
pdb.runcall(my_function)

たとえば、関数内で通常のpdb.set_trace()を実行します。


Tracer()はipythonにはまだ別のモジュールに存在しています。 次の操作を実行できます。

from IPython.core.debugger import Tracer

def my_function():
    x = 5
    Tracer()()
    print 5

Tracer周りの追加のかっこに注意してください

editTracer は廃止予定です。代わりにset_trace()を使うべきです


これを実行して、指定された行にブレークポイントを設定することができます:

run -d -b12 myscript

ここで、-b12は12行目にブレークポイントを設定します。この行を入力するとすぐにpdbにドロップされ、そのブレークポイントまで実行するにはcを入力する必要があります。


私はいつも同じ問題を抱えていて、私が見つけた最良の回避策はかなりコードが壊れてしまう行を追加することです:

...
a = 1+2
STOP
...

その後、私はそのコードを実行すると、それは壊れて、私はそこに行くと検査する%debugを行うことができます。 また、%pdbをオンにすると、コードが壊れている箇所に常に移動することができますが、どこでもコードが破損するたびに検査したくない場合は、この作業が面倒になる可能性があります。 より洗練されたソリューションが大好きです。





ipython