0Pricing
Python Academy · レッスン

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.py

w と 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 frame

ipdb — 高機能デバッガー

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. logging モジュールの基礎
  2. ハンドラー、フォーマッター、フィルター
  3. 構造化ロギング
  4. pdb によるデバッグ
← Python Academyに戻る