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

  • 投稿日:
  • by
  • カテゴリ:

以前、

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のログをリアルタイムに見る (エムロジック放課後プロジェクト)