« 2008年9月 | メイン | 2008年11月 »

2008年10月 アーカイブ

2008年10月 8日

Windows環境でMTのログをリアルタイムに見る

前回に引き続きWin32関係のネタを書いていきます。

前回Windowsのデバッグ用ツールDebugViewを用いてApacheのエラーログをリアルタイムに見ることができるようにしてみましたが、Movable Typeのログも見れると開発者的には便利だったりします。
そこで、今回は前回の応用ということでMovable Typeのログをリアルタイムに見るためのプラグインを紹介したいと思います。

DebugViewのインストール方法など事前の用意については、前回のエントリーを参照してください。

準備

今回はPerlのモジュールWin32-API-OutputDebugStringが必要になりますので事前にインストールしてください。
ActivePerlではppmを用いて容易にインストールできます。

ppm install Win32-API-OutputDebugString

Win32DStrプラグインのインストール

今回紹介するプラグインは、Win32DStrプラグインです。

ダウンロード: win32dstr.zip
ライセンス: Apache 2.0

Win32DStrプラグインはMTのログをWindows APIであるOutputDebugStringを使ってデバッグ出力を行うWindows環境専用のプラグインです。

zipアーカイブを解凍して「plugins」ディレクトリ内の「Win32DStr」ディレクトリを、Movable Typeインストールディレクトリにある「plugins」ディレクトリの下にコピーしてください。

作業後、Movable Type の操作メニュー(システム・モード)から 設定 > プラグイン を選択し、プラグインの一覧に「Win32DStr」が表示されていることを確認してください。これでインストール完了です。

Win32DStrプラグインを使う

あとは勝手にMTのログが流れてきます。
Win32DStr
MT関連の開発やデバッグを行う場合には、MT::Logを使って追加のデバッグ出力をすることで、効率よくデバッグできるようになるかと思います。
もちろん実際にMTにログがたまっていますので、、、ログの肥大化にご注意ください。。。

お問い合わせ

エムロジック株式会社ではMovable Typeによるサイト構築やプラグイン開発、iPhone・Windows等のアプリケーション開発業務を行っています。
お問い合わせはこちらまで。

2008年10月22日

MTプラグインの簡単なデバッグ方法

以前、

MovableType のプラグインをperl debuggerでデバッグする (エムロジック放課後プロジェクト)

このエントリで、perl debuggerを使ったデバッグの仕方を書きました。この中で、

Movable Type のプラグインをデバッグする方法というと、ログにメッセージや変数を出力する、いわゆる「printfデバッグ」になると思います。

と触れられている、いわゆる「printfデバッグ」について、今回は書いてみたいと思います。

MTプラグインのデバッグで、もっとも多く行われているのがいわゆる「printfデバッグ」ではないかと思います。
これは、プラグインの中から、変数の値や、文字列をシステムログに吐き出すことによって行います。
この方法のメリットは、とりあえずプラグインを実行してみて、後から、ログをみることで、そのプラグインの動作状況を確認できることにあります。リアルタイムに確認したい場合にはあまり向いていませんが、プラグインの要所要所で、メッセージをログに吐き出すことで、動作の流れを把握することが可能です。

プラグインに以下の関数を追加します。

sub doLog {
    my ($msg) = @_; 
    return unless defined($msg);

    use MT::Log;
    my $log = MT::Log->new;
    $log->message($msg) ;
    $log->save or die $log->errstr;
}

以下のように使います。

変数を出力する

doLog($var);


文字列を出力する

doLog('hoge');


配列や、ハッシュを出力する

use Data::Dumper;
doLog(Dumper($hash_ref));


配列や、ハッシュをYAMLで出力する

use YAML;
doLog(YAML::Dump($hash_ref);


例えば、関数に入った時に

doLog('Func:hoge');

として、関数に入ったことを記録します。
もし、システム・ログにFunc:hogeと書かれていなければ、この関数は処理されていないということが分かります。
関数内の要所要所でその処理内容を記録することで、関数内のどこまできちんと処理されたのかが分かりますし、条件分岐の流れなども追うことができます。

関数の中で

doLog("hoge:$hoge");

として、変数hogeの内容を記録すれば、その時の変数の値も分かりますし、デバッグの役に立ちます。
ループ内で、変数の状況を記録すると、ループ中にどのような処理が行われたかを調べることもできます。

システムログに書き出す、このデバッグ方法は非常に手軽です。
ただし、システムログに大量のデバッグメッセージが残ってしまいますので、こまめにログを削除した方が良いかもしれません。
それから、プラグイン完成時には、デバッグメッセージを吐き出している箇所を、すべて削除するようにしましょう。こうしないと、実際の使用時に大量のデバッグメッセージが書き出されてしまいます! ご注意を!

Windows環境の方はこちらのエントリも参照してみてください。

Windows環境でMTのログをリアルタイムに見る (エムロジック放課後プロジェクト)