Practice of Programming

プログラム とか Linuxとかの話題

mod_perl で、perl -d やりたい!

と言うときには、Apache::DBを使います(apache 1.3でしか試してません)。
※修正しました 5/2

PerlFixupHandler Apache::DB

mod_perlを使っているところに書きます。こんな感じ。

# 追記
<Perl>
  use Apache::DB ( );
  Apache::DB->init;
</Perl>
#/追記
<location /test>
SetHander perl-script
PerlHandler Test
PerlFixupHandler Apache::DB
</location>

そして、apache を、-X オプションで動かします。
Debian なら、

% /usr/sbin/apache-perl -X

って感じですね。たぶんRedHatなら、

% /usr/sbin/httpd -X

かな?

この状態で、目的のアプリケーションに、ブラウザでアクセスします。
そうすると、先ほどの、apache を動かしているコンソールに下記のように出ます。

Loading DB routines from perl5db.pl version 1.25
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::((eval 125):3):

  DB<1> 

このあとは、perl -d と同じように使えます。良く使うのは

n ... サブルーチンを越えて実行 
s ... 一行ずつ実行
... 最後の n/s を実行
x 変数 ... 変数の中身を表示
r ... サブルーチンから呼び出し元へ戻る

とか...って、まぁ、あんまり詳しくないんですが(^^;
こないだのYAPCのライトニングトークに良い解説があったんですけどね。置かれてない...?

Perl Pro Debuggingを会社で買ったので読まないとな。