新規記事投稿 フォロー記事投稿 記事のキャンセル
From: いしどう <ishidou@po.iijnet.or.jp>
Subject: 細かいデバッグをするときは(別の方法)
Date: 1999/01/22 21:36:50
Reference: mesh.program/00591

いしどう です。

1月22日に、TADさんは書きました。

>1月22日に、三葉工房の管理者さんは書きました。
>
>>perlの現実は,よく確かめたこれでこのプログラムは,確実にまちがいなく
>>実行されるぞ! 実行を試みたが100%実行確実のプログラムが実行されない
>>のが当り前な事だと思います。
>
>何事も思い込みはダメですよ。
>プログラムが動かなかったとしたら、どこかがまずいんです。
>それが現実です。(^^;;

そのとーりです(^^)
まず、自分を信用してはいけません。他人のプログラムのアラ探しをする
くらいのつもりで見直しましょう。

>>そして,今回もこの様な事で,私なりに精一杯,実行成功の確かめられている
>>ダウンロードした自動リンクプログラム(N.S.E2.75)の記事削除のルーチンと
>>自分の記述した同じ目的のルーチンを皿の様に確かめ続けた上での,質問です。
>
>目で見ただけでは、結構見落としがあるものですよ。

>目で見て確認する事(机上デバッグ)は大切なことですが、その後に実際に動かして
>確認することも必ず必要です。
>にあさんが以前投稿した記事「細かいデバッグをする時は...」を参考にして
>要所要所で 変数の値がどうなっているか や 意図している処理に分岐しているか を
>確認した方がよいでしょう。

出力を text/plain にする、という方法ですよね。
わたしが CGI のような画面出力ができないスクリプトでよくやるデバッグの
方法は、どこを実行しているのかやその時点での変数の値を、ファイルへ出力
する、という方法です。

たとえば、三葉工房さんのスクリプトであれば、うまく発言の削除が出来ない
(ですよね?)ということなので、削除をする関数 &cutplay に以下のよ
うに追加をして以前試した環境で実行してみました(赤い字のところが追加し
た部分です)。

>open (CAT, ">$BaseDir/$in{'Cat'}") || die "ファイルが開きません!\n,
>何処かの構文が間違っています!";
>foreach $ereize (@lines){
>@catchin=split(/&&/, $ereize);
>#
>open(DEBUG,">>$BaseDir/debug.txt");
>print DEBUG "$catchin[0]$catchin[2]$catchin[3]\n$in{'target'}\n\n";
>close DEBUG;
>#
>if("$catchin[0]$catchin[2]$catchin[3]" ne $in{'target'})
>{print CAT "$ereize";}}
>close (CAT);

んで、このばあいは$BaseDir/debug.txt と言うファイルに比較する2つ
の文字列が記録されますんで、中身を見て下さい(三葉工房さんの場合
には FTP でそのファイルをひっぱってきてテキストエディタで見るとい
いでしょう)

…ほら、確かにおかしいでしょう?
なんでおかしいか、はスクリプト全体を見ないとわかんないと思います
が、削除できてない原因は突き止められると思います。

―――――――――

Perl で CGI スクリプトを作る入門書ですが、今日書店に立ち寄って
ぱらぱらと眺めてみました。
数種類見た中では、技術評論社の「CGIのための実践Perl入門」がよ
さそうでした。
三葉工房さんも、見てみて下さい。

がんばってください。