2011年5月19日木曜日

web2py でデバッグツールを利用する ①

web2py でのデバッグについて書きます。

web2py でデバッグを利用する方法

web2py の WEBベースIDE は使いやすいかどうかは別にして、ほとんどの機能をサポートしている。機能もうまく分類されており、初めて利用する人にも理解しやすいと思う。

web2py は、エラー時にチケットを発行する。エラーチケットを見れば、どの箇所で問題が発生したかプログラムソースで示されるのでわかりやすい。

しかし一つ不可解なのは、なぜかデバック機能が見当たらないのである。web2py Book にはデバッグ機能を持っているという記述はあるのだが、肝心の機能説明はない。熟練の開発者は別として、プログラムの動きやバグを理解するのにデバッグは欠かせないと思うのだが・・・。

いろいろ調べたところ、web2py でも簡単にデバッグを利用できる。ただ WEBベースIDE の機能ではなく、Python や外部ツールの機能を使用することになる。

web2py でデバッグを利用するには大きく分けて次の方法がある。

  • デバッグツール(デバッガ)を使う
  • 外部 IDE(Eclipse など)の機能を使う

今回と次回の記事で、デバッグツールを利用したデバッグ方法について説明したい。

pdb を使ったデバッグ

やはり pdb なら web2py でも簡単に使用できる。pdb は python に標準に付属しているためインストール作業は不要だ。使い方は、調べたいコードの直前に次のコードを追加する。

  import pdb
  pdb.set_trace()
これによって web2pyサーバを起動したコマンドライン上に、pdbが起動する(下)。

あとは pdb コマンドを使ってデバッグを行えばよい。

pdb コマンドは Kay の時でも記事にしたが、よく使うコマンドを再度掲載しておく。

pdbでよく使うコマンド
コマンド引数説明
s(tep)ステップを実行(ステップイン)
呼び出し関数などがあった場合、その中のステップも実行
n(ext)ステップを実行(ステップオーバー)
呼び出し関数などがあっても、現関数内でステップ実行
r(eturn)現在の関数が返るまで実行
p変数を表示
l(ist)first, last引数が無い場合は、現在行を中心に11行ソースを表示(もしくは前に表示したリストの続きを表示)
第一引数がある場合は、表示開始行を指定
第二引数がある場合は、表示終了行を指定。第二引数が第一より小さい場合、カウントと解釈する
第一と第二引数の間にはコンマを入れる
b(reak)lineno 引数がある場合は、引数の行番号にブレークポイントを設定
引数が無い場合は、ブレークポイント一覧を表示
tbreaklineno一時的なブレークポイントで、最初にそこに達したときに自動的に取り除かれる
cl(ear)bpnumber引数のブレークポイント番号を解除する
c(ontinue)ブレークポイントまで実行する
q(uit)デバッガ終了
参考: Python ライブラリリファレンス デバッガコマンド

(注意)
pdb は web2py の pythonランタイム版でも動くが、ソースが表示できない。このため、web2py プログラムソース版の使用をお勧めする。

ipdb を使ったデバッグ

ipdb は iPython の機能が使えるデバッガである。ipdb は python には付属していないので次のようにインストールする必要がある。pip もしくは easy_install でインストールできる。

pip install ipdb

easy_install ipdb

使い方は、調べたいコードの直前に次のコードを追加する。
  import ipdb
  ipdb.set_trace()
ipdb で使用するデバッグコマンドは、pdb と同じようだ。

個人的には iPython の機能が使えるといっても、ipdbでは OSコマンドなどが使えるわけでもないのでピンとこない。ただソースをカラフルに表示するので気に入っている(下)。

参考: python.org - ipdb

(注意)
ipdb は web2py の pythonランタイム版では利用できない。

今回の記事はここまでです。次回ももう少し、デバッグツールに触れます。