モジュールpdbはPythonプログラム用の対話的ソースコードデバッガを定義します。(条件付き)ブレークポイントの設定やソース行レベルでのシングルステップ実行、スタックフレームのインスペクション、ソースコードリスティングおよびいかなるスタックフレームのコンテキストにおける任意のPythonコードの評価をサポートしています。事後解析デバッギングもサポートし、プログラムの制御下で呼び出すことができます。
デバッガは拡張可能です -- 実際にはクラスPdbとして定義されています。現在これについてのドキュメントはありませんが、ソースを読めば簡単に理解できます。拡張インターフェースはモジュールbdb(ドキュメントなし)とcmdを使っています。
デバッガのプロンプトは"(Pdb) "です。デバッガに制御された状態でプログラムを実行するための典型的な使い方は:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb) continue
> <string>(1)?()
(Pdb) continue
NameError: 'spam'
> <string>(1)?()
(Pdb)
他のスクリプトをデバッグするために、pdb.pyをスクリプトとして呼び出すこともできますせます。例えば:
python -m pdb myscript.py
スクリプトとして pdb を起動すると、デバッグ中のプログラムが異常終了した 時に pdb が自動的に検死デバッグモードに入ります。検死デバッグ後 (またはプログラムの正常終了後) には、pdb はプログラムを再起動します。 自動再起動を行った場合、 pdb の状態 (ブレークポイントなど) は そのまま維持されるので、たいていの場合、プログラム終了時に デバッガも終了させるよりも便利なはずです。 バージョン 2.4 で 新たに追加 された仕様: 検死デバッグ後の再起動機能が追加されました
クラッシュしたプログラムを調べるための典型的な使い方は:
>>> import pdb
>>> import mymodule
>>> mymodule.test()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "./mymodule.py", line 4, in test
test2()
File "./mymodule.py", line 3, in test2
print spam
NameError: spam
>>> pdb.pm()
> ./mymodule.py(3)test2()
-> print spam
(Pdb)
モジュールは以下の関数を定義しています。それぞれが少しづつ違った方法でデバッガに入ります:
| statement[, globals[, locals]]) |
| expression[, globals[, locals]]) |
| function[, argument, ...]) |
| ) |
| traceback) |
| ) |
sys.last_tracebackのトレースバックの事後解析デバッギングに入ります。