pythonでのdebug(pdb,pudb)のメモ
Pythonのdebugで使用するpdbとpudbについてのメモ
pdb
対話形式のデバッガ、標準ライブラなのでインストールなしで使える
https://docs.python.jp/3/library/pdb.html
主なコマンドは下記
コマンド | 効果 |
---|---|
b | ブレークポイントを設定 |
c | ブレークポイントまで移動 |
n | 現在の行を実行し、次の行で停止。次の行が関数だった場合は関数の中では止まらない |
s | 現在の行を実行し、次の行で停止。次の行が関数だった場合は関数の中で停止 |
p | 変数の値を表示 |
pp | pretty-printで変数を表示 |
q | デバッガ停止 |
r | 関数を抜ける |
list | 実行中の行の周辺を表示 |
whatis | 式の型を表示 |
# python -m pdb スクリプト名 $ python -m pdb sample.py (Pdb) b 19 # <- 19行目にブレークポイントを設置 (Pdb) n # <- 1行実行 -> from __future__ import print_function (Pdb) list # <- 現在の行の周辺を表示 1 # vim: fileencoding=utf-8 2 3 from __future__ import division 4 -> from __future__ import print_function 5 from __future__ import unicode_literals 6 from __future__ import absolute_import 7 try: 8 from future_builtins import ascii, filter, hex, map, oct, zip 9 except ModuleNotFoundError: 10 pass # running python version is 3 11 (Pdb) c # <- ブレークポイントまで移動 -> x = div(x, i) (Pdb) list 14 return x / y 15 16 def main(): 17 x = 6 18 for i in [3, 2, 1]: 19 B-> x = div(x, i) 20 return x 21 22 if __name__ == '__main__': 23 main() [EOF] (Pdb) c -> x = div(x, i) (Pdb) list 14 return x / y 15 16 def main(): 17 x = 6 18 for i in [3, 2, 1]: 19 B-> x = div(x, i) 20 return x 21 22 if __name__ == '__main__': 23 main() [EOF] (Pdb) p i # <- iの値を表示、ループの2回目なので、i は現在2 2 (Pdb)
起動時に指定する以外にも、import pdb; pdb.sey_trace()
を記述することで、コード中で起動することもできる。
# vim: fileencoding=utf-8 from __future__ import print_function def main(): print('hoge') import pdb; pdb.set_trace() # ここでpdbを起動する print('fuga') if __name__ == '__main__': main()
pudb
pdbよりも高機能なデバッガ、こちらはインストールが必要
$ pip install pudb
基本的な操作はpdbと同じ。
困った時は?
でヘルプがでるのでそれを見ればいい。
<C-x>
でpythonを実行できるペインに移動でき、ここでreplのようにいろいろ試せるのが便利。
起動は下記
$ pudb3 sample.py