これはMovable Type Advent Calendar 2012の3日目の記事です。
Movable Type や プラグインの開発時のデバッグを捗らせる話を書きます。
開発用の MT の起動
開発時には MT を PSGI 版で起動しておくと便利です。サーバにはドキュメントにも書かれているStarmanを利用すると簡単でトラブルが少ないと思います。
starman コマンドからオプションを指定しないで MT を起動している場合は、コードを変更しても自分で再起動するまで反映されないので、開発時には -R オプションを付けて指定したディレクトリ以下のファイルに変更があると自動で再起動されるようにしておくと便利です。
LANG=C starman -R `pwd`/extlib,`pwd`/plugins,`pwd`/addons --pid=/path/to/pidfile mt.psgi
(Linux 環境では Linux::Inotify2 が、Mac 環境では Mac::FSEvents が入っていることを確認しておいてください。)
また starman コマンドはデフォルトで本番モードになりますが、-E development
を指定すると開発モードになりアクセスログを表示させたりすることができます。
LANG=C starman -E development -R `pwd`/extlib,`pwd`/plugins,`pwd`/addons --pid=/path/to/pidfile mt.psgi
print デバッグ
最もお手軽なデバッグ方法として、コードの中で変数の値を表示してみる print デバッグと呼ばれる方法があります。MTをPSGI版で起動している場合には、表示させたい場所で単に print するだけで starman を起動したターミナルにデバッグ情報を表示することができます。
print($value);
use Data::Dumper;
print(Dumper($obj));
デバッガを利用したデバッグ
MTをPSGI版で起動すればデバッガを利用することもできます。
LANG=C perl -Sd starman --workers=1 --pid=/path/to/pidfile mt.psgi
プログラムの中に以下の一行を入れておけば、その場所で変数の内容を確認したり、スタックトレースを確認したりできます。
$DB::single = 1;
Perl のデバッガの使い方は Google で検索すると参考になる記事を見つけることができます。Perl デバッガ
エラー発生時にスタックトレースを表示させる
mt-config.cgi に DebugMode 1
と書いたり、「システム > 全般設定」で「デバッグモード」に「1」を設定するとMTがデバッグモードになり、エラー発生時に詳細情報が表示されるようになるのですが、
デバッグ時にはスタックトレースも表示してくれると便利です。以下のファイルを plugins に入れておくと、エラー発生時にスタックトレースが表示されるようになります。
LogExporter を使ってログをコンソールに流す
LogExporter というプラグインを使うと以下の情報をファイルに出力することができます。
- MTのログ
- SQLのクエリログ
- Perl の警告など
出力したファイルを tail -f でコンソールに流しておくとデバッグに便利です。
コメントする