概要
Python標準デバッガーであるPdbの使い方を、ブレークポイント、ステップ実行、変数確認を中心に整理する。
Pdbを使うと、print文だけでは追いにくい処理の流れを、停止位置ごとに確認できる。
関数の中へ入るのか、次の行へ進むのか、変数の値をどう見るのかを押さえると、原因調査がしやすくなる。
この記事の構成
- 対象環境と利用上の注意
本文記載時の環境と現在そのまま利用できない箇所を確認。 - 作業時の注意点
設定変更やコマンド実行前に確認しておきたい注意点を整理。 - Pdbの使用例
Pdbの使用例をコードや具体例で確認。 - Pdbの基本操作方法
Pdbの基本操作方法をコードや具体例で確認。
対象環境と利用上の注意
- 本文記載時の環境
Python 3.7以降のbreakpoint()と標準デバッガーPdbを利用する例。
Python 3.6以前の代替方法も併記。 - 確認時期
2026年8月にPythonの公式資料と照合。
掲載例のすべての対話出力は現行Pythonで再実行していない。 - 現在そのまま利用できない箇所
停止位置のパス、行番号、Pdbの表示形式はPythonのバージョンや対象ファイルで変わる。
出力を固定値として使わず、操作コマンドと処理の流れを参照する。
作業時の注意点
- stepとnext
stepは関数の中へ入り、nextは関数呼び出しを一行として進める。 - 停止位置
set_trace()を書いた行そのものではなく、その次の実行行で止まる。 - 変数のスコープ
現在停止している位置から見える変数だけを確認できる。 - 消し忘れ
breakpoint()やpdb.set_trace()を本番コードへ残さない。
実施内容
Pdbの使用例
-
説明用のサンプルプログラムを作成
説明用に下記debug_example.pyを作成。def add(a, b, c): return a + b + c breakpoint() step = 0 step = add(1, 2, 3) step = add(4, 5, 6) print(step)breakpoint()はPython 3.7以降で利用でき、既定ではpdb.set_trace()を呼び出す。
Python 3.6以前では、import pdb; pdb.set_trace()を同じ位置へ記述。 -
debug_example.pyを実行
breakpoint()が実行されると、その次に実行するstep = 0の行で止まり、入力待ちを表す(Pdb)が表示される。$ python debug_example.py > /path/to/debug_example.py(6)<module>() -> step = 0 (Pdb) -
nextとstepを使い分けて値を確認
nは現在の関数内の次の行まで進み、sは呼び出した関数の内部へ入る。aで現在の関数の引数を、p <式>で式の評価結果を確認できる。
以下は操作の流れを抜粋した例となる。(Pdb) n # step = 0を実行し、次の行へ進む (Pdb) s # add(1, 2, 3)の内部へ入る --Call-- > /path/to/debug_example.py(1)add() -> def add(a, b, c): (Pdb) a # 現在の関数の引数を表示 a = 1 b = 2 c = 3 (Pdb) r # 現在のadd関数がreturnするまで実行 --Return-- > /path/to/debug_example.py(2)add()->6 -> return a + b + c (Pdb) n # 呼び出し元へ戻り、次の行まで進む (Pdb) p step 6 (Pdb) n # 2回目のaddは内部へ入らず実行 (Pdb) p step 15
Pdbの基本操作方法
以下、よく使用するPdbコマンド。
-
[
s] or [step]
現在行を実行し、呼び出した関数の内部を含む、次に停止可能な位置で止まる。 -
[
n] or [next]
現在行を実行し、現在の関数内の次の行、または現在の関数が戻る位置で止まる。
呼び出した関数の内部では停止しない。 -
[
r] or [return]
現在の関数が戻るまで実行。 -
[
c] or [continue]
次回のブレークポイントまで停止せず実行。 -
[
l] or [list]
現在停止行の前後のソースを表示。 -
[
a] or [args]
現在停止している関数の引数を表示。 -
[p <式>]
現在のコンテキストで式を評価し、結果を表示。 -
[
q] or [quit]
デバッグ中のプログラムを終了。
まとめ
- PdbはPython標準のデバッガーで、処理を止めながら変数や流れを確認できる。
- step、next、return、continueの違いを押さえると、調査しやすくなる。
- breakpoint()やpdb.set_trace()は便利だが、確認後はコードから外す。