web-dev-qa-db-ja.com

PythonコードにPDBブレークポイントを配置する簡単な方法は?

便利な質問です。 Visual StudioやXCodeなどのIDEのデバッガーには少し甘やかされています。 import pdb; pdb.set_trace()と入力してブレークポイントを設定する必要があるのは少し不器用です(ファイルの先頭にpdbをインポートして、忘れてしまう可能性があるため、インポートしない方がいいです)。

Pythonコードにブレークポイントを設定する簡単な方法はありますか?

93
Joe

以下を実行することにより、コマンドラインからpdbにプログラムを実行できます。

python -m pdb your_script.py

最初の行で中断します。その後、breakコマンドを使用して、コードの任意の場所にブレークポイントを追加できます。その構文は次のとおりです。

b(reak)[[ファイル名:] lineno |関数[、条件]]

どこにでもブレークポイントを追加できるように十分な柔軟性があります。

106
mdeous

次を使用できます。

from pdb import set_trace as bp

code
code
bp()
code
code
53
Apogentus

Vimでは、このためにマクロを設定しています(私の.vimrcファイルに):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

そのため、\ b(挿入モードでない場合)を押すと、現在の行の後にブレークポイントが追加されます。または、\ B(大文字に注意)と現在の行の前に1つ追加されます。

うまくいくようです。他のほとんどの「単純な」プログラマーエディター(emacs、sublimetextなど)には、これを行うための同様の簡単な方法が必要です。

編集:私は実際に持っています:

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

pythonソースファイルに対してのみ有効にします。 javascriptまたは使用する他の言語に似た行を簡単に追加できます。

2019アップデート(Python 3.7 +)

Python 3.7以降には、vimの以前のbreakpoint()を置き換えることができる組み込みimport pdb; pdb.set_trace()があります。それでも同じように機能します。

33
Daniel

プログラムを実行するたびに手動でブレークポイントを設定したくない場合(Python 3.2+)、例えば3行目にブレークポイントを直接作成し、そこで実行を停止するとします。

python -m pdb -c "b 3" -c c your_script.py

次の情報が役立つ場合があります。

ファイル.pdbrcがユーザーのホームディレクトリまたは現在のディレクトリに存在する場合、デバッガプロンプトで入力されたかのように読み込まれ、実行されます。これは特にエイリアスに役立ちます。両方のファイルが存在する場合、ホームディレクトリ内のファイルが最初に読み込まれ、そこで定義されたエイリアスはローカルファイルによって上書きされます。

バージョン3.2で変更:.pdbrcには、continueやnextなどのデバッグを継続するコマンドを含めることができるようになりました。以前は、これらのコマンドは効果がありませんでした。

バージョン3.2の新機能:pdb.pyは、.pdbrcファイルで指定されているかのようにコマンドを実行する-cオプションを受け入れるようになりました。「デバッガーコマンド」を参照してください。

22
AXO

まだ試していませんが、実装されたばかりです Python 3.7のbreakpoint()という新しいビルトイン これは、1つのステートメントでブレークポイントを挿入できることを意味します。

breakpoint()
15
Bill

これは、ソースコードに何も実装せずにコマンドラインでpdbを使用する方法です(ドキュメントやその他のオンラインリソースは、過去にビジュアルデバッガーのみを使用したプログラマーにこれを説明するのに適していません)。

シェルプロンプトで次のように入力して、pdbを起動します。

python -m pdb 'python_script'

このコマンドはpdbを初期化し、pdbデバッガーはpython_scriptの最初の行で中断し、ユーザーからの入力を待ちます。

(Pdb)

これは、デバッガと通信するためのインターフェースです。ここで、ここでコマンドを指定できます。ビジュアルデバッガーでボタンまたはキーボードショートカットを使用するのとは反対に、ここではコマンドを使用して同じ結果を導き出します。

コマンド「n」(次)でコードの次の行に移動できます。

(Pdb) n

次を実行すると、行番号とソース内の特定のコードが表示されます。

> python_script(line number)method name
-> current line in the source code

ソースコードで行番号を指定することにより、ブレークポイントを設定できます。

(Pdb) b 50

ここで、デバッガーは行50でブレークするように設定されています。他のブレークポイントがない場合、行50のブレークポイントが最初になり、この場合1であるブレークポイントIDによって参照できます。さらにブレークポイントを追加すると、識別子が順番に取得されます(つまり、2、3など)。

ブレークポイントが設定されると、次のようにpdbがブレークポイントに到達するまでプログラムの実行を続けます。

(Pdb) c

ブレークポイントに到達すると、前述のようにnコマンドを使用して次の行に移動できます。変数の値を調べたい場合は、次のようにパラメーターコマンドを実行します。

(Pdb) p variable_name

ブレークポイントが不要になった場合は、clearコマンドでブレークポイントのIDを渡すことで、ブレークポイントをクリアできます。

(Pdb) clear 1

最後に、デバッガでの作業が完了したら、pythonコマンドラインインタープリターを終了するように実行を終了できます。

(Pdb) exit()

これが誰でもpdbを使い始めるのに役立つことを願っています。以下は、デバッガで使用できるコマンドのリストです。 pdb so question and answer

10
picmate 涅

IDEデバッグをサポートするpythonを使用するか、優れたWinpdbツールをチェックアウトできます。どのプラットフォームでも動作し、pythonスクリプトにグラフィカルなデバッグ機能を提供します。

http://winpdb.org/

4
Glenjamin

Python 3.7には、ブレークポイントを設定する新しい組み込み方法があります。呼び出し中

breakpoint()

詳細はこちら https://stackoverflow.com/a/53263117/6488361

3
Ruto Collins

次を使用できます。

  • ウイング
  • Pydevプラグインを使用したEclipse
  • パイチャーム

上記はすべて、IDE内からのpythonデバッグをサポートしています。

2
vvatsa

Atomに[Pythonプラグインがインストールされている場合、 'pdb'と入力してEnterキーを押すと、スニペットにimportとトレースバックが入力されます。

これは、vimで編集してドロップダウンが表示されるのを待っている場合でも、入力することもあるためです。

0
Simplex