pdb によるデバッグ
Python 組み込みのデバッガーで、コードを対話的に1行ずつ実行します。
「pdb によるデバッグ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
pdbとは
pdbはPython組み込みの対話型デバッガーです。実行を一時停止し、変数を調べ、コードを1行ずつ実行できます。
import pdb
def faulty(n):
result = n * 2
pdb.set_trace() # execution pauses here
return result + 1
faulty(5)breakpoint() — Python 3.7以降
breakpoint()は、import pdb; pdb.set_trace()の組み込みショートカットです。PYTHONBREAKPOINT環境変数に従います。
def process(data):
for item in data:
if item < 0:
breakpoint() # drop into pdb here
print(item)
process([1, -2, 3])pdbの基本コマンド
基本的なコマンドには、n(次の行)、s(ステップイン)、c(続行)、q(終了)、p expr(表示)、l(ソースの一覧表示)があります。
# Inside pdb prompt:
# (Pdb) n — execute next line
# (Pdb) s — step into function
# (Pdb) c — continue to next breakpoint
# (Pdb) p my_var — print value
# (Pdb) l — show source around current line
# (Pdb) q — quit変数の調査
pで式を表示し、ppで見やすく整形して表示し、locals()ですべてのローカル変数を確認できます。
# (Pdb) p data
# [1, -2, 3]
# (Pdb) pp {"key": "value", "num": 42}
# {'key': 'value',
# 'num': 42}
# (Pdb) p locals()条件付きブレークポイント
条件付きブレークポイントを設定すると、条件が真の場合にだけ一時停止でき、同じ操作を何度もステップ実行せずに済みます。
import pdb
def process(items):
for i, item in enumerate(items):
if item < 0: # manual condition
pdb.set_trace()
result = item * 2
# Or inside pdb: b filename.py:12, x < 0ポストモーテムデバッグ
未処理の例外が発生した直後の状態を、pdb.post_mortem()で調べるか、python -m pdb script.pyでスクリプトを実行します。
import pdb
try:
1 / 0
except ZeroDivisionError:
pdb.post_mortem() # inspect at the crash point
# Or from CLI:
# python -m pdb my_script.pyw と where による変数の確認
w(where)は現在の呼び出しスタックのトレースバックを出力するため、現在のフレームにどのように到達したかを確認できます。
# (Pdb) w
# /app/main.py(10)main()
# -> process([1,-2,3])
# /app/main.py(5)process()
# -> breakpoint()フレーム間の移動
u(up)とd(down)を使うと、呼び出しスタック内のフレーム間を移動して、呼び出し元の関数の変数を調べられます。
# (Pdb) u — move to calling frame
# (Pdb) d — move back down
# (Pdb) p data — inspect variable in that frameipdb — 高機能デバッガー
ipdbはpdbをIPythonの機能で拡張したもので、タブ補完、構文ハイライト、マジックコマンドを利用できます。
# pip install ipdb
import ipdb
def calc(x):
ipdb.set_trace()
return x ** 2
calc(7)pudb — ビジュアルターミナルデバッガー
pudbは、コード、変数、スタックのパネルを備えたフルスクリーンのTUIデバッガーをターミナル上で提供します。
# pip install pudb
# python -m pudb my_script.py
import pudb
def run():
pudb.set_trace()
data = [1, 2, 3]
return sum(data)CIでのブレークポイントの無効化
PYTHONBREAKPOINT=0を設定すると、CIや本番環境ですべてのbreakpoint()呼び出しを何もしない処理にできます。
# In CI pipeline:
# export PYTHONBREAKPOINT=0
# python my_script.py
# breakpoint() is silently skippedクイックチェック
次のブレークポイントまで実行を続けるpdbコマンドはどれですか。
まとめ
breakpoint()を使うと実行を一時停止してpdbを起動できます。基本コマンドはn、s、c、p、qです。より豊富な機能が必要な場合は、ipdbまたはpudbを試してください。CIではPYTHONBREAKPOINT=0を設定して無効化します。
よくある質問
「pdb によるデバッグ」レッスンは無料ですか?
はい。「pdb によるデバッグ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「pdb によるデバッグ」で何を学びますか?
Python 組み込みのデバッガーで、コードを対話的に1行ずつ実行します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「pdb によるデバッグ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- logging モジュールの基礎
- ハンドラー、フォーマッター、フィルター
- 構造化ロギング
- pdb によるデバッグ