Python

Pythonでデバッグしたい

Pythonはエラー発生時にスタックトレースを表示してくれるのはいいのですが何分どこがいけないのかがよくわからない。

そこで、Pythonスクリプトでデバッグを行う方法をメモしておきます。

下記サイト様が非常に簡単にまとめてくださっていたのですが、デバッグ用語に関する細かい説明がなかったため、補足説明を加えさせていただきます。
http://racchai.hatenablog.com/entry/2016/05/30/070000

Pythonでのデバッグは、pdbモジュールを使用します。

使い方は簡単。怪しげな場所の直前に、下の一行を追加するだけ。

import pdb; pdb.set_trace()

この状態でスクリプトを実行すると、当該箇所で対話型デバッガが起動します。
あとはひたすらstepコマンドを打って一行ずつ実行していきます。(これをステップインといいます)
また、デバッグ中に変数の中身が見たい場合は、pコマンドを使用します。p hogeと打ち込むとhogeに格納されている値を確認することができます。

コマンド早見表

コマンド 説明 備考
s(tep) ステップイン(行単位で実行) 処理中に関数に入った場合は関数内でも1行ずつ停止する
n(ext) ステップオーバー(行単位で実行) 関数呼び出しも含めて1行を一気に実行する
r(eturn) ステップアウト(関数単位で実行) 実行時の関数が返るまで実行する
l(ist) 現在行前後のソースの表示
a(rgs) 現在いる関数の引数を表示
p 変数の値をチェック p hogeといった風に使う
c(ontinue) 次のブレークポイントまで実行

参考サイト

http://docs.python.jp/2/library/pdb.html
http://racchai.hatenablog.com/entry/2016/05/30/070000