![]() |
|||
| | HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 | | |||
|
HOME >> デバックについて
■ デバックについて
デバックとは、プログラムの修正作業のことです。 プログラムを作成する際には、エラーは必ずでてくるものです。そこで、いかに短時間で効率的にエラーを発見し修正できるかが大切になってきます。 この章では主に、エラー部分の発見方法をいくつかご紹介いたします。 最も一般的なものに、print文によるチェックがあります。 プログラムの途中に print文をはさんで、変数の値や、関数の戻り値などを確認します。 下記に、性別を判定する簡単なプログラムがありますが、このプログラムには間違いがあります。 男性の「M」 を入力すると 「あなたの性別は女性です。」 と表示されてしまいます。 どの部分が間違っているのでしょう? [性別判定プログラム]
print "あなたの性別は?(男性=M、女性=F)=>"; $input = <STDIN>; chomp $input; if ( $input eq 'M' ) { print "あなたの性別は女性です。"; } elsif ( $input eq 'F' ) { print "あなたの性別は男性です。"; } else { print "再度御入力ください。(男性=M、女性=F)=>"; } exit; 短いプログラムなので、すぐに分かった方もいると思いますが、順番に確認していきましょう。 まず、下記のように、プログラムの途中に print文をはさんで変数が正しく取得できているか確認します。 入力した文字が表示されればOKです。
print "あなたの性別は?(男性=M、女性=F)=>"; $input = <STDIN>; chomp $input; print $input; ← $input 変数が正しく取得できているかを確認 exit; ・・・ ここでは、入力された文字が正しく取得されていると思います。 ということで、次に疑わしいのは分岐処理の部分となります。 よく見ると、男性の場合と女性の場合の表示メッセージが逆になっています。
if ( $input eq 'M' ) { print "あなたの性別は女性です。"; ←┐ } elsif ( $input eq 'F' ) { 表示メッセージが逆になっている print "あなたの性別は男性です。"; ←┘ } else { print "再度御入力ください。(男性=M、女性=F)=>"; } そこで、下記のように修正して、正しいプログラムとなりました。
print "あなたの性別は?(男性=M、女性=F)=>"; $input = <STDIN>; chomp $input; if ( $input eq 'M' ) { print "あなたの性別は男性です。"; ←┐ } elsif ( $input eq 'F' ) { 表示メッセージを入れ替えた print "あなたの性別は女性です。"; ←┘ } else { print "再度御入力ください。(男性=M、女性=F)=>"; } exit; このように、変数等を確認していって正しい部分を確認していくことで、間違い部分を絞り込んでいきます。 上のサンプルプログラムでは、動作はするが動作結果が不正なエラーの例でした。 実際には、動作自体行なわれないエラーのほうが多いと思います。 そのような場合は、疑わしい部分を 「#」 を使ってコメントアウトして、動作が行なわれるか確認する方法があります。 下記のプログラムは、print文でメッセージを表示するだけの簡単なプログラムですが、エラーとなり動作しません。 どこがおかしいのでしょうか?
print "こんにちは。" print "これはテストプログラムです。"; exit; そこで、下記のように1行目をコメントアウトして動作確認すると、正しくメッセージが出てきます。
#print "こんにちは。" print "これはテストプログラムです。"; exit; よく見ると、1行目の末尾に 「;(セミコロン)」 を入れるのを忘れています。 下記のように修正して、動作するようになりました。
print "こんにちは。"; print "これはテストプログラムです。"; exit; このように、疑わしい部分をコメントアウトし動作確認していくことで、間違い部分を絞り込んでいきます。 ■ 文法ミスのチェック
Perl に 「-wc」 オプションをつけて起動すると、文法チェックが行なえます。 「-w」 はスクリプトの構文チェックを行い警告メッセージを出力します。 「-c」 は構文チェックのみを行い、スクリプトを実行せずに終了します。 → その他のオプション
ActivePerl でチェックする場合
警告メッセージは英語で表示されますが、間違っている変数名や行数なども表示される為、
英語が特に読めなくても、どの部分が間違っているかが大体分かります。
#!C:/Perl/bin/perl -wc サーバー上でチェックする場合 #!/usr/local/bin/perl -wc ■ ブラウザーでのチェック
下記の方法で、ブラウザー上からエラーチェックを行なうことが出来ます。 「BEGIN」 から始まる1行を、Perlのパス指定の下に追加することで、ブラウザーから簡単にチェックを行なえます。 エラーがない場合は、Perl での処理結果がそのまま表示されます。
#!/usr/local/bin/perl
エラーがある場合には、エラーメッセージが標準エラー出力チャンネル(STDERR) に格納されます。BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } この標準エラー出力を、HTML出力としてWEBサーバーに渡します。 ■ よくある間違い・文法ミス
ここでは、よくあるPerlでの間違いをご紹介いたします。 エラーがでたときの参考にしてください。 ・ 文の末尾に 「; (セミコロン)」 を忘れている ・ 関数や変数のスペルミス ・ プログラム内に全角スペースが使われている ・ Perl のパスの記述を間違えている ・ 条件の判定で文字列に 「==」 や 「=>」 などの数値演算子を使っている ・ 条件の判定で数値に 「eq」 や 「ne」 などの文字列演算子を使っている ・ ライブラリの最後に 「1;」 の記述を忘れている ・ 「Content-Type: text/html」 の指定を忘れている、あるいは間違っている ・ パーミッションを設定していない(サーバー上で動作させる場合) ・ ループ処理が無限ループになっている
|
|||||||||||||||||||||||||||||||||||||||