web-dev-qa-db-ja.com

iPythonノートブックでデバッグする正しい方法は何ですか?

私が知っているように、%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

私が試したもの:

  1. Cell-1の最初の行に%debugを設定しようとしました。ただし、セル2を実行する前であっても、すぐにデバッグモードに入ります。

  2. コードreturn do_some_thing_about(b)の直前の行に%debugを追加しようとしました。しかし、その後、コードは永遠に実行され、決して停止しません。

Ipythonノートブック内にブレークポイントを設定する正しい方法は何ですか?

98
Rex

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

60

Jupyter内でipdbを使用できます:

from IPython.core.debugger import Tracer; Tracer()()


編集:上記の関数はIPython 5.1以降廃止されました。これは新しいアプローチです:

from IPython.core.debugger import set_trace

ブレークポイントが必要な場所にset_trace()を追加します。入力フィールドが表示されたら、helpコマンドにipdbと入力します。

86
Leopd

戻り関数はdef関数(メイン関数)の行にあるため、1つのタブを指定する必要があります。そして使用

%%debug 

の代わりに

%debug 

回線全体だけでなくセル全体をデバッグします。おそらく、これがあなたの助けになることを願っています。

12
Mohit Khurana

これはいつでも任意のセルに追加できます。

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)
10
krock

Jupyter Notebookでimport pdbと入力し、この cheatsheet を使用してデバッグします。とても便利です。

c->続行、s->ステップ、b 12-> 12行目などにブレークポイントを設定します。

いくつかの便利なリンク: pdbのPython公式ドキュメントデバッガーコマンドの使用方法を理解するためのPython pdbデバッガーの例

便利なスクリーンショット: enter image description hereenter image description here

7
flowera

%pdb magic command も使用するとよいでしょう。 %pdb onと言うだけで、呼び出しスタックの深さに関係なく、pdbデバッガーはすべての例外で実行されます。とても便利な。

デバッグしたい特定の行がある場合は、そこで例外を発生させるか(多くの場合、すでに存在しています!)、他の人が提案している%debugマジックコマンドを使用します。

4
waterproof

Python 3.7では、 breakpoint() 関数を使用できます。入るだけ

breakpoint()

ランタイムを停止したい場所ならどこからでも同じpdbコマンド(r、c、n、...)を使用するか、変数を評価できます。

4
Vlad Bezden

エラーが発生したら、次のセルで%debugを実行するだけです。

4
Escachator

PixieDebugger を発見しました。私はまだテストする時間がないと思っていましたが、それは本当にipdbでipythonで使用されている方法をデバッグする最も類似した方法のようです

enter image description here

「評価」タブもあります

3