私が知っているように、%debug magic
は1つのセル内でデバッグできます。
ただし、複数のセルにわたる関数呼び出しがあります。
例えば、
In[1]: def fun1(a)
def fun2(b)
# I want to set a breakpoint for the following line #
return do_some_thing_about(b)
return fun2(a)
In[2]: import multiprocessing as mp
pool=mp.Pool(processes=2)
results=pool.map(fun1, 1.0)
pool.close()
pool.join
私が試したもの:
Cell-1の最初の行に%debug
を設定しようとしました。ただし、セル2を実行する前であっても、すぐにデバッグモードに入ります。
コードreturn do_some_thing_about(b)
の直前の行に%debug
を追加しようとしました。しかし、その後、コードは永遠に実行され、決して停止しません。
Ipythonノートブック内にブレークポイントを設定する正しい方法は何ですか?
ipdbを使用
経由でインストールする
pip install ipdb
使用法:
In[1]: def fun1(a):
def fun2(a):
import ipdb; ipdb.set_trace() # debugging starts here
return do_some_thing_about(b)
return fun2(a)
In[2]: fun1(1)
行ごとに実行する場合 n そして、機能へのステップイン用 s デバッグを終了するには、プロンプトを使用します c。
利用可能なコマンドの完全なリスト: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf
Jupyter内でipdb
を使用できます:
from IPython.core.debugger import Tracer; Tracer()()
編集:上記の関数はIPython 5.1以降廃止されました。これは新しいアプローチです:
from IPython.core.debugger import set_trace
ブレークポイントが必要な場所にset_trace()
を追加します。入力フィールドが表示されたら、help
コマンドにipdb
と入力します。
戻り関数はdef関数(メイン関数)の行にあるため、1つのタブを指定する必要があります。そして使用
%%debug
の代わりに
%debug
回線全体だけでなくセル全体をデバッグします。おそらく、これがあなたの助けになることを願っています。
これはいつでも任意のセルに追加できます。
import pdb; pdb.set_trace()
デバッガーはその行で停止します。例えば:
In[1]: def fun1(a):
def fun2(a):
import pdb; pdb.set_trace() # debugging starts here
return fun2(a)
In[2]: fun1(1)
Jupyter Notebookでimport pdb
と入力し、この cheatsheet を使用してデバッグします。とても便利です。
c
->続行、s
->ステップ、b 12
-> 12行目などにブレークポイントを設定します。
いくつかの便利なリンク: pdbのPython公式ドキュメント 、 デバッガーコマンドの使用方法を理解するためのPython pdbデバッガーの例 。
便利なスクリーンショット: (
%pdb
magic command も使用するとよいでしょう。 %pdb on
と言うだけで、呼び出しスタックの深さに関係なく、pdb
デバッガーはすべての例外で実行されます。とても便利な。
デバッグしたい特定の行がある場合は、そこで例外を発生させるか(多くの場合、すでに存在しています!)、他の人が提案している%debug
マジックコマンドを使用します。
Python 3.7では、 breakpoint() 関数を使用できます。入るだけ
breakpoint()
ランタイムを停止したい場所ならどこからでも同じpdbコマンド(r、c、n、...)を使用するか、変数を評価できます。
エラーが発生したら、次のセルで%debug
を実行するだけです。
PixieDebugger を発見しました。私はまだテストする時間がないと思っていましたが、それは本当にipdbでipythonで使用されている方法をデバッグする最も類似した方法のようです
「評価」タブもあります