« MTプラグインの雛形を作るスクリプト MTPlugin-Starter Ver0.60公開 | メイン | MovableType用TemplateSetExporter Plugin Ver.0.50 »

MovableType のプラグインをperl debuggerでデバッグする

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

ですが、怪しいと思う場所をすんなりと特定できなかったり、変数が想定していたのとは違う値を持っていたり、となるとログを取る場所や変数を変えたり、増やしたり、という作業を繰り返すわけですが、何度も同じ作業をやるのは面倒だし、時間はかかるし、イライラしてきます。

そういう時は、printfデバッグをさっさとあきらめ、perl debuggerを使ってデバッグします。

  1. ソースを編集し、デバッガを起動したい行の直前に、以下の1行(ブレークポイント)を設定します。(MTのコードはBEGINプロックで実行されるので、デバッガのプロンプトが出た時点では実行が完了しています。ですからソースに直接ブレークポイントを仕込んでおきます。)
  2. $DB::signal = 1;
      
  3. デバッガ用にターミナルを開き、デバイス名を調べます。
  4. # tty
    /dev/pts/0
      
  5. ターミナルのデバイスファイルのパーミッションを変更します。
  6. # chmod a+rw /dev/pts/0
      
  7. ターミナルのカラム、ライン数を調べます。
  8. # stty -a
    speed 9600 baud; rows 50; columns 102; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ;
    start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel
    -iutf8
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
      
  9. .htaccessを編集し、事前に調べたターミナルのデバイス名、カラム、ラインを環境変数として設定します。
  10. SetEnv PERLDB_OPTS TTY=/dev/pts/0
    SetEnv COLUMNS 102
    SetEnv LINES 50
      
  11. デバッガ用ターミナルで以下のコマンドを入力し、デバッガからの接続を待ちます。
  12. # clear; sleep 10000
      
  13. mt.cgiを編集し、perlに渡す引数を-dに変更します。
  14. #!/usr/bin/perl -d
      
  15. ブラウザからmt.cgiにアクセスします。
  16. 以下のような表示が出て、デバッガが開き、設定したブレークポイントで停止すれば成功です。
  17. Loading DB routines from perl5db.pl version 1.28
    Editor support available.
    
    Enter h or `h h' for help, or `man perldebug' for more help.
    
    MT::Plugin::Hoge::check_param(/var/www/html/mt/plugins/Hoge/hoge.pl:58):
    58:         my ($eh, $app, $param, $tmpl) = @_;
      DB<1>
      

これでさっくりとバグを直してしまいましょう。

お問い合わせ

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

コメントを投稿