debugging - 使い方 - spyder デバッグ




ipdbを使用して1つのセルでPythonコードをデバッグする(jupyterまたはIpython) (3)

私はFirefoxでjupyter(またはIpython)ノートブックを使用していますが、セル内のいくつかのPythonコードをデバッグしたいです。 'import ipdb;を使用しています。 ipdb.set_trace() 'ブレークポイントの種類として、たとえば私のセルには次のコードがあります:

a=4
import ipdb; ipdb.set_trace()
b=5
print a
print b

Shift + Enterで実行すると、このエラーが発生します。

--------------------------------------------------------------------------
MultipleInstanceError                     Traceback (most recent call last)
<ipython-input-1-f2b356251c56> in <module>()
      1 a=4
----> 2 import ipdb; ipdb.set_trace()
      3 b=5
      4 print a
      5 print b

/home/nnn/anaconda/lib/python2.7/site-packages/ipdb/__init__.py in <module>()
     14 # You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
     15 
---> 16 from ipdb.__main__ import set_trace, post_mortem, pm, run, runcall, runeval, launch_ipdb_on_exception
     17 
     18 pm                       # please pyflakes

/home/nnn/anaconda/lib/python2.7/site-packages/ipdb/__main__.py in <module>()
     71         # the instance method will create a new one without loading the config.
     72         # i.e: if we are in an embed instance we do not want to load the config.
---> 73         ipapp = TerminalIPythonApp.instance()
     74         shell = get_ipython()
     75         def_colors = shell.colors

/home/nnn/anaconda/lib/python2.7/site-packages/traitlets/config/configurable.pyc in instance(cls, *args, **kwargs)
    413             raise MultipleInstanceError(
    414                 'Multiple incompatible subclass instances of '
--> 415                 '%s are being created.' % cls.__name__
    416             )
    417 

MultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.

このコードをブラウザーのjupyterノートブックではなくjupyter qtconsoleで使用すると、同じエラーが表示されます。 このエラーの意味とそれを回避するにはどうすればよいですか? pdbデバッガのnext、continueなどのコマンドを使用して、セル内のコードを段階的にデバッグすることは可能ですか?


Jupyter Notebookを使用している場合は、魔法のコマンド「 %% debug 」でセルを開始します。 次に、デバッグセッションをナビゲートするのに役立つipdb行がセルの下部に表示されます。 次のコマンドで開始できます。

n- 現在の行を実行し、次の行に移動します。

c- 次のブレークポイントまで実行を継続します。

すべての変数が新たに割り当てられるように、デバッグを決定するたびにカーネルを再起動するようにしてください。各変数の値はipdb行で確認できます。その変数の値。

%%debug
import pdb
from pdb import set_trace as bp
def function_xyz():
    print('before breakpoint')
    bp() # This is a breakpoint.
    print('after breakpoint')

Jupyterのバージョンは5.0.0で、対応するipythonバージョンは6.1.0です。 使ってます

import IPython.core.debugger
dbg = IPython.core.debugger.Pdb()
dbg.set_trace()

Tracer は非推奨としてリストされています。

更新:

以下の別の回答 https://.com/a/43086430/8019692 メソッドを使用しようとしましたが、エラーが発生しました:

MultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.

他のセルで定義された関数にブレークポイントを設定し、別のセルで関数を実行できるため、 %% debug マジックよりも自分のメソッドの方が好きです。 Jupyter / IPythonは、ブレークポイントが設定されている関数のデバッガーにドロップされ、通常の pdb コマンドを使用できます。 それぞれ自分自身に...

@ lugger1、受け入れられている答えは非推奨です。


Tracer() は非推奨です。

つかいます:

from IPython.core.debugger import set_trace

そして、ブレークポイントが必要な場所に set_trace() します。

from IPython.core.debugger import set_trace

def add_to_life_universe_everything(x):
    answer = 42
    set_trace()
    answer += x

    return answer

add_to_life_universe_everything(12)

これはうまく機能し、組み込みのpdbを使用するよりも少し快適になります(構文の強調表示など)。

source





ipdb