[PREVIOUS CHAPTER]
[NEXT CHAPTER]
3 デバッグの HOW-TO
3.1 How to debug (1)
in fml-support: 5282
1. OSのメールのログを調べる。
INSTALL file の Appendix A をみてみてください。
2. fml のログを調べる。$DIR/log (ML's HOME ログファイル)
3. fml からMTAへちゃんと渡せているかのログを調べる。
($DIR/var/log/_smtplog)
4. "makefml test ML" で fml 自体が動いているかを調べる。
このテストはMTAとは完全に無関係に動くのでこれが動くならMTAの問題
makefml test ML
と打つとデバッグモードでの動作テストができます。画面に debug 情報が一
杯出るので emacs の shell mode なり /usr/bin/script などでログをとるな
りして見て下さい。makefml test ML を起動すると配送のテストかコマンドの
テストか?選択をしろといわれます。
3.2 How to debug (2)[デバッグのポイント]
From: fml-support: 01411
…略…
○ 私 printf デバッグがすきなので $debug = 1; にした時の画面に出るエラー
情報から推測するのが多いです。
もしくは
○ perl -d オプションで perl debugger を使う
Example:
% ($FML/bin/emumail.pl; echo something )|perl -d $FML/fml.pl $PWD
....debugger starts ...
<1> t
<2> c
.... debug information flood! ....
○ どのファイルか?は目的別なのでそれっぽい名前のことが多いですが…
基本関数 fml.pl
SMTP libsmtp.pl
その他 lib(それっぽい名前).pl
[Naming Convention Example]
ra = remote administration
fop = file operation
...
とか省略系もあるけど…
3.3 古典の printf debug の例
From: fukachan@phys.titech.ac.jp
X-Mail-Count: 00702
例えば次のような適当な printf 構文をつっこむ
print STDERR "REQ:GUIDE $Envelope{'req:guide'}";
&InitConfig; # initialize date etc..
&Parsing; # Phase 1(1st pass), pre-parsing here
&GetFieldsFromHeader; # Phase 2(2nd pass), extract headers
のあいだにはさんで、
print STDERR "REQ:GUIDE $Envelope{'req:guide'}";
&InitConfig; # initialize date etc..
print STDERR "REQ:GUIDE $Envelope{'req:guide'}";
&Parsing; # Phase 1(1st pass), pre-parsing here
print STDERR "REQ:GUIDE $Envelope{'req:guide'}";
&GetFieldsFromHeader; # Phase 2(2nd pass), extract headers
print STDERR "REQ:GUIDE $Envelope{'req:guide'}";
とかしておいて、
% perl sbin/localtest.pl |sed 's/test/#guide/' | perl fml.pl $PWD -d
とかして、この REQ:GUIDE の値の変化をみるというのはどうでしょう?
ただしいばあいは &Parsing のあと 1になって そのままのはずですよね
[PREVIOUS CHAPTER]
[NEXT CHAPTER]