Pythonでpdbを使ってデバッグ
この記事では、Pythonの対話型デバッガであるpdbの使い方を説明します。pdbを使うことで、プログラムの実行をステップ実行したり、変数の値を確認したり、ブレークポイントを設定したりすることで、バグを発見し修正することができます。
目次
pdbとは?
pdb(Python Debugger)は、Pythonに組み込まれた対話型デバッガです。プログラムの実行を制御し、バグを発見・修正するのに役立ちます。
pdbを使用することで、コードをステップ実行し、変数の値を確認しながらプログラムの流れを詳細に追跡できます。
pdbの基本的な使い方
最も簡単な使い方は、デバッグしたいPythonスクリプトに`import pdb; pdb.set_trace()`を追加することです。この行が実行されると、pdbが起動し、対話型デバッグセッションが開始されます。
import pdb
def my_function(x, y):
z = x + y
pdb.set_trace()
w = z * 2
return w
result = my_function(5, 3)
print(result)
スクリプトを実行すると、`pdb.set_trace()`の行でプログラムの実行が一時停止し、pdbプロンプトが表示されます。そこで、様々なデバッグコマンドを使用できます。
ブレークポイントの設定
`pdb.set_trace()`以外にも、ブレークポイントを設定する方法はあります。例えば、特定の条件を満たした場合にのみプログラムの実行を中断させることができます。
より高度なブレークポイントは、IDEの機能を利用することで設定できます。多くのIDEは、ブレークポイントを設定し、変数の監視、ステップ実行などの機能を提供しています。
ステップ実行
pdbでは、以下のコマンドでステップ実行ができます。
- `n` (next): 次の行へ実行
- `s` (step): 関数呼び出しの中へステップイン
- `c` (continue): ブレークポイントまで実行
- `r` (return): 現在の関数から抜ける
変数の検査
`p` (print)コマンドで変数の値を確認できます。
>>> p x
5
>>> p y
3
変数の値だけでなく、複雑な式も評価できます。
コードの実行
pdbでは、`!`コマンドを使用して、Pythonのコードを実行できます。
>>> !print(x + y)
8
便利なコマンド
- `l` (list): 現在の行周辺のコードを表示
- `q` (quit): デバッグセッションを終了
- `h` (help): ヘルプを表示
実例
簡単な例として、リストの要素を合計する関数をデバッグしてみましょう。
import pdb
def sum_list(numbers):
total = 0
for number in numbers:
total += number
pdb.set_trace()
return total
my_list = [1, 2, 3, 4, 5]
result = sum_list(my_list)
print(f"合計: {result}")
このコードを実行し、pdbでステップ実行することで、ループの動作や変数の変化を詳しく確認できます。