pdbの使い方

pdbの使い方。
pdbPythonに標準で付属しているデバッガ。

デバッガの起動

デバッガからプログラムを起動

>>> import pdb
>>> import sample
>>> pdb.run('sample.main()')
> <string>(1)<module>()
(Pdb)

pdb.pyをスクリプトとして呼び出す。

root@johan:~/work# python -m pdb sample.py
> /root/work/spam.py(line)<module>()
-> def func(arg):
(Pdb)

プログラムに組み込む。
(デバッグしたい部分に書く)

import pdb; pdb.set_trace()

Error後に起動。

>>> import sample
>>> sample.main()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "./sample.py", line 4, in main
    print_spam()
  File "./sample.py", line 3, in print_spam
    print spam
NameError: spam
>>> import pdb
>>> pdb.pm()
> ./sample.py(3)print_spam()
-> print spam
(Pdb)

デバッガコマンド

よく使うデバッガコマンド。
s(tep)はsでもstepでも実行可能。

s(tep) current行を実行して次の実行可能な行をcurrentにする
l(ist) current行の前後合計11行を表示するか前回のlistの続きの11行を表示する
r(eturn) 現在の関数が終了するまで処理を実行する
b(reak) line ブレークポイントを設定
c(ont(inue)) ブレークポイントまで処理を実行する
a(rgs) 現在の関数の引数を確認する
w(here) スタックトレースの表示
u(p) スタックトレースのカレントフレームを1レベル上げる
d(own) スタックトレースのカレントフレームを1レベル下げる
p expression expressionを評価する(printでも出力可)
run プログラムを再実行する
q(uit) デバッガを終了する