アメリエフの技術ブログ

Amelieff Staff Blog

Python デバッグ

Pythonに限った話ではありませんが、一生懸命プログラムを書いて、いざ実行すると、いくつものバグに遭遇します。エラーが出る、あるいは、エラーは出ないのに、プログラムが意図したとおりに動いてくれないということも。

こういう場合、きっとどこかで条件文を書き間違えたとか、整数同士で割り算をしたら結果の小数点が切り捨てられて整数になってしまったとか、そんな些細なミスを犯しているに違いありません。
しかし、どこで何がおかしくなっているのか、何行にもわたる長いプログラムを眺めていても、たいていの場合は解決しません。
そんなとき助けてくれるのが、デバッガです。

以前「Perl デバッグ」という記事にて、Perlのデバッガについてご紹介しています。
今回の記事では、同じように動くPythonの標準のデバッガをご紹介します。
大体同じような内容ですので、Perlの記事と併せて読んでいただけましたら幸いです。

Pythonを実行するときに -m pdb と付けることで利用できます。
(pdbって、python debugの略でしょうか?)

$ python -m pdb sample.py
> /home/work/directory/sample.py(9)()
-> """
(Pdb) コマンドを入力します

コマンドはPerlとほとんど同じです。

list(l):実行が止まっている行のソースが前後あわせて10行表示されます。

next(n):一行実行します。関数やモジュールは飛ばします。

step(s):nextと違い、関数やモジュールの中まで呼び出して一行ずつ実行します。

print(p):「print 変数」と実行することで、実行時点での変数の中身を表示できます。変数に意図した値が入っていない、といった問題を確認できます。

continue(c):ブレークポイントまでプログラム実行を進めます。ブレークポイントが設定されていないとき(あるいは、ブレークポイントが条件文の中に設定されていて、その条件が一切満たされないとき)は、プログラムの最後まで実行します。

break(b):ブレークポイント(continueコマンドの実行を止める場所。長いコードの、目的の場所の前や、ループの中などに設定すると便利です)を設定します。ブレークポイントは複数設定することができます。

clear(cl):設定したブレークポイントを削除します。

quit(q):途中で終了します。あるいは「「ctrl+D」でも終了できます。

他にもいろんなコマンドがあるので、気になった方は調べてみてください。
Pythonを書いてみたはいいけど、なぜかうまく動かない……とお悩みの方、これでバグをつぶしていきましょう!