pythonでデバッグ。pdbを使ってみたまとめ。(さっくり編)

プログラムではよくprintデバッグが最強だと言われますが。。。
えぇ、おっしゃるとおりです(ちょっっwwww、はやくも敗北)


でも、それ以外のデバッグツールも便利ですよね
c言語ならgdbJavascriptならfirebug などスタックトレースやステップ実行ができるのはやっぱり便利かと...


じゃあ、pythonではどうするの??


ってことで調べてみました。

結論から先に。。

pdbを使う。

以下、軽い使い方

% python -m pdb myscript.py arg1 arg2
> /home/kinoshita/pytmp/myscript.py(5)?()
-> import
(pdb)
(Pdb) help            /// ヘルプの表示

Documented commands (type help <topic>):
========================================
EOF    break  condition  disable  help    list  q       step     w     
a      bt     cont       down     ignore  n     quit    tbreak   whatis
alias  c      continue   enable   j       next  r       u        where 
args   cl     d          exit     jump    p     return  unalias
b      clear  debug      h        l       pp    s       up     

Miscellaneous help topics:
==========================
exec  pdb

Undocumented commands:
======================
retval  rv

(Pdb) list          /// プログラムの表示
  1     #!/usr/bin/env python
  2     # -*- coding: utf-8 -*-
  3     
  4     
  5  -> import sys                    /// -> 現在の位置を表示
  6     import os
  7     
  8     print "hello world"
  9     
[EOF]

(Pdb) continue      /// プログラムの実行
hello world
The program finished and will be restarted
> /home/kinoshita/pytmp/myscript.py(5)?()
-> import sys

ほかにも、こんなコマンドがあります。

alias 変数などのエイリアスをつける
args 関数の引数表示
break ブレークポイントの表示と設置
clear ブレークポイントの削除
condition ブレークポイントの実行条件
continue プログラムの実行と再開
disable ブレークポイントの削除。clearと同じ
down スタックトレースを戻す。See up
enable ブレークポイントの設置。breakと同じ
! 1文実行
help pdbのコマンドヘルプ。help で表示
ignore ブレークの指定回数文だけ無効化
list ソースコード表示
next 次のステップまで実行
p 式を評価
quit デバッガ終了
return 関数リターンまで実行
step 関数を実行
tbreak breakと同じだが、実行後breakは削除される。
unalias エイリアスの削除
up スタックトレースを現状から1段あがる(新しいフレームへ)。downの逆
whatis 引数の型を表示
where スタックトレースの現在位置を表示

次回は、もうちょっとコマンドを試してみることにします。