Pythonデバッグ入門:pdbでステップ実行とブレークポイント設定を徹底解説

投稿日 2025年02月15日   更新日 2025年02月15日

Python入門
Python
デバッグ

はじめに

プログラム開発において、デバッグは非常に重要な工程です。コードに潜むバグや不具合を早期に発見し、修正するためには、効率的なデバッグツールの活用が不可欠です。Pythonには、標準ライブラリとしてpdb(Python Debugger)が搭載されており、これを利用することで、コードの実行を一行ずつ確認しながら問題箇所を特定することが可能です。
本記事では、初心者でもわかりやすいように、pdbを使ったステップ実行やブレークポイントの設定方法を徹底解説します。Pythonデバッグ、pdb使い方、ステップ実行、ブレークポイント設定といったキーワードを意識しながら、具体的なコード例と共に説明していきます。

pdbとは?

pdbは、Pythonに標準で搭載されている対話型デバッガです。プログラムの実行中に変数の状態を確認したり、コードの任意の位置で実行を一時停止(ブレークポイント設定)して、ステップごとに実行内容を追跡することができます。これにより、バグの原因を効率的に特定できるようになります。
pdbの主な特徴は以下の通りです。
  • 標準ライブラリ:追加のインストールが不要で、Python環境に最初から含まれています。
  • 対話型操作:コマンドラインからインタラクティブにコマンドを入力し、デバッグ操作が可能です。
  • 柔軟な制御:ステップ実行、次の行へ進む、関数の中に入る、実行の再開など、細かい制御ができます。

pdbの基本的な使い方

pdbを利用するには、対象のPythonスクリプトを以下のように実行します。
python -m pdb your_script.py
上記のコマンドを実行すると、プログラムはpdbデバッガ内で開始され、対話型のプロンプトが表示されます。ここからは、pdbのコマンドを入力することで、プログラムの実行を制御していきます。
また、コード内に直接ブレークポイントを設定する方法もあります。次のように、pdb.set_trace() を挿入することで、その位置で実行が一時停止します。
import pdb

def add(a, b):
    pdb.set_trace()  # ここで実行が停止する
    return a + b

result = add(2, 3)
print("Result:", result)
この方法を使うと、問題箇所を特定したい箇所にブレークポイントを容易に設定でき、ステップ実行や変数の確認ができます。

pdbの主なコマンド

pdbでは、以下のような基本コマンドを利用してデバッグを進めます。ここでは、特に頻繁に使用するコマンドについて解説します。
  • l (list) 現在の実行位置付近のソースコードを表示します。(Pdb) l
  • n (next) 現在の行の実行を完了し、次の行に移動します。関数の中に入らず、現在の関数内の次の行を実行します。(Pdb) n
  • s (step) 現在の行を実行し、もし関数呼び出しがあればその関数の中に入って実行を続けます。関数内部の動作を詳細に追いたいときに使用します。(Pdb) s
  • c (continue) 次のブレークポイントまで、またはプログラム終了まで実行を継続します。(Pdb) c
  • b (break) ブレークポイントを設定します。行番号や関数名を指定できます。 行番号で設定する場合: (Pdb) b 15 関数名で設定する場合: (Pdb) b my_function
  • 行番号で設定する場合: (Pdb) b 15
  • 関数名で設定する場合: (Pdb) b my_function
  • p (print) 指定した変数や式の値を表示します。(Pdb) p variable_name
  • q (quit) デバッグを終了し、プログラムの実行を中断します。(Pdb) q
これらのコマンドを組み合わせることで、プログラムの動作を細かく制御しながらバグを特定していくことができます。

pdbでのステップ実行とブレークポイント設定の実践例

ここでは、具体的な例を通して、pdbを使ったステップ実行とブレークポイント設定の方法を実践的に解説します。

例題:数値の加算処理のデバッグ

以下のコードは、2つの数値を加算して結果を返すシンプルな関数を持つプログラムです。しかし、実際には誤った計算結果が出るバグが潜んでいると仮定します。
# sample.py
import pdb

def add(a, b):
    # デバッグのためにブレークポイントを設定
    pdb.set_trace()
    # バグ:引数aを2倍にしてしまっている
    return (a * 2) + b

def main():
    x = 5
    y = 3
    result = add(x, y)
    print("Result:", result)

if __name__ == '__main__':
    main()

デバッグの手順

  • ブレークポイントの設定 上記コードでは、pdb.set_trace() を使って add 関数内にブレークポイントを設定しています。プログラム実行時、add 関数に入ると自動的に実行が停止します。
  • プログラムの実行 ターミナルから以下のコマンドで実行します。python sample.py すると、pdbのプロンプト (Pdb) が表示され、デバッグモードに入ります。
  • 変数の確認 ブレークポイントで停止した状態で、変数の値を確認してみます。(Pdb) p a 5 (Pdb) p b 3 ここで、aが正しく5であること、bが3であることを確認します。
  • ステップ実行 n コマンドを使って次の行に進みます。(Pdb) n この時点で、計算式 (a * 2) + b が実行されるため、計算結果がどのようになっているか確認するために、p コマンドで式を評価してみてもよいでしょう。
  • 実行の再開 c コマンドでプログラムの実行を再開します。ブレークポイントがない場合は、プログラムが最後まで実行され、結果が表示されます。(Pdb) c 実行結果として「Result: 13」が表示されますが、本来期待すべきは「Result: 8」だったとすると、どこかにバグがあることが分かります。
  • 原因の特定 この例では、aを2倍してしまっているために誤った結果になっていることが判明します。実際のコード修正では、単に return a + b とするのが正しいでしょう。

pdbを活用した効果的なデバッグのコツ

pdbを用いたデバッグ作業をより効率的に行うためのポイントをいくつか紹介します。
  • ブレークポイントを戦略的に配置する 問題が発生している箇所や、疑わしい関数の先頭にpdb.set_trace()を配置することで、必要なタイミングで実行を停止させ、状況を詳しく確認できます。
  • 変数の状態を頻繁に確認する p コマンドを使って、重要な変数の値を随時確認することで、予期せぬ値の変化や不整合を早期に発見できます。
  • ステップ実行と関数の内部確認を使い分ける n コマンドで大まかな流れを追いつつ、s コマンドを用いて関数の内部に入るなど、状況に応じた実行制御を行いましょう。
  • コードのリスト表示で文脈を把握する l コマンドで周辺コードを表示し、現在の実行位置や処理内容を把握することで、デバッグ時の混乱を防げます。
  • 終了する際はqコマンドで安全に抜ける デバッグを中断してプログラムを終了したい場合は、q コマンドを使用して安全にデバッガを終了しましょう。

おわりに

本記事では、Pythonの標準デバッガであるpdbを使ったデバッグ方法について、ステップ実行やブレークポイント設定の基本から実践例まで詳しく解説しました。デバッグはプログラムの品質向上やバグ修正において極めて重要な工程です。pdbを使いこなすことで、コード内の問題箇所を迅速に特定し、効率的に修正できるようになります。
  • Pythonデバッグの基本として、pdbの使い方をマスターしましょう。
  • ステップ実行とブレークポイント設定を戦略的に活用することで、複雑なバグも解決しやすくなります。
  • この記事で紹介したpdbの主なコマンドを実際に試し、デバッグ作業に慣れていくことが、より良いプログラム作成につながります。
今後の開発において、pdbを積極的に利用し、バグの早期発見と修正に役立ててください。これにより、コードの品質向上や開発効率の改善が期待できます。ぜひ、本記事の内容を参考に、Pythonデバッグのスキルを磨いていきましょう。

参考資料

この記事では、Pythonデバッグ、pdb入門、ステップ実行、ブレークポイント設定などのキーワードを意識して解説しました。初心者の方でも、この記事を通してpdbの使い方をマスターし、実際の開発現場で効率的なデバッグ作業を行えるようになることを願っています。
Resumy AI監修者
監修者: RESUMY.AI編集部

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

監修者: RESUMY.AI編集部
Resumy AI監修者

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

AI職務経歴書作成サービス RESUMY.AIAI職務経歴書作成サービス RESUMY.AI
60秒で完了