前に、Perl Hello World の例を使用して perl プログラムを作成および実行する方法の基本について説明しました。
この記事では、perl プログラム / スクリプトをデバッグする方法を確認しましょう。 Perl デバッガの使用
perl プログラムをデバッグするには、以下に示すように「perl -d」を使用して perl デバッガーを呼び出します。
# perl -d ./perl_debugger.pl
perl デバッガ コマンドを詳細に理解するために、次のサンプル perl プログラム (perl_debugger.pl) を作成してみましょう。
$ cat perl_debugger.pl
#!/usr/bin/perl -w
# Script to list out the filenames (in the pwd) that contains specific pattern.
#Enabling slurp mode
$/=undef;
# Function : get_pattern
# Description : to get the pattern to be matched in files.
sub get_pattern
{
my $pattern;
print "Enter search string: ";
chomp ($pattern = <> );
return $pattern;
}
# Function : find_files
# Description : to get list of filenames that contains the input pattern.
sub find_files
{
my $pattern = shift;
my (@files,@list,$file);
# using glob, obtaining the filenames,
@files = <./*>;
# taking out the filenames that contains pattern.
@list = grep {
$file = $_;
open $FH,"$file";
@lines = <$FH>;
$count = grep { /$pattern/ } @lines;
$file if($count);
} @files;
return @list;
}
# to obtain the pattern from STDIN
$pattern = get_pattern();
# to find-out the list of filenames which has the input pattern.
@list = find_files($pattern);
print join "\n",@list;
1. Perl デバッガーに入る
# perl -d ./perl_debugger.pl
DB<1>
2. (l) を使用して特定の行またはサブルーチン ステートメントを表示する
DB<1> l 10
10:私の $pattern;
DB<2> l get_pattern
11 {
12:my $pattern;
13:print “Enter search string:“;
14:chomp ($pattern =);
15:$pattern を返します;
16 }
3. (b) を使用して get_pattern 関数にブレークポイントを設定します
DB<3> b find_files
4. (b) を使用して特定の行にブレークポイントを設定します
DB<4> b 44
5. (L) を使用してブレークポイントを表示
DB<5> L
./perl_debugger.pl:
22:my $pattern =shift;
break if (1)
44:print join “\n”,@ list;
break if (1)
6. (s and n) を使用した段階的な実行
DB<5> s
main::(./perl_debugger.pl:39):$pattern =get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12:私の $pattern;
オプション s および n は、各ステートメントを段階的に実行します。 Option s はサブルーチンにステップ インします。オプション n は、サブルーチンを 1 ステップで実行します (ステップオーバー)。
s オプションはサブルーチンにステップ インしますが、while n オプションはサブルーチンを実行します (ステップ オーバーします)。
7. (c) を使用して次のブレークポイント (または行番号、またはサブルーチン) まで続行
DB<5> c
検索文字列を入力してください:perl
main::find_files(./perl_debugger.pl:22):
22:my $pattern =shift;
8. (c) を使用して特定の行番号まで進みます
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36:return @list;
9. (p) を使用して特定の変数の値を出力します
DB<6> p $pattern
perl
DB<7> c
main::(./perl_debugger.pl:44):print join “\n”,@list;
DB<7> c
./perl_debugger.pl
デバッグ プログラムが終了しました。 q を使用して終了するか、R を使用して再起動します。
inhibit_exit を使用して、プログラムの終了後に停止しないようにします。
h q、h R または h o を使用して、追加情報を取得します。
最後の続行操作の後、出力は「./perl_debugger.pl」として stdout に出力されます。これは、パターン「perl」と一致するためです。
10.ファイルからデバッグ コマンドを取得する (ソース)
Perl デバッガーは、ファイルからデバッグ コマンドを取得して実行できます。たとえば、「debug_cmds」という名前のファイルを、perl デバッグ コマンドを次のように作成します。
c
p $pattern
q
R を使用して操作を再開することに注意してください (終了してデバッガーを再度開始する必要はありません)。
DB<7> R
DB<7> source debug_cmds
>> c
Enter検索文字列:perl
./perl_debugger.pl
デバッグされたプログラムが終了しました。 q を使用して終了するか、R を使用して再起動します。
inhibit_exit を使用して、プログラムの終了後に停止しないようにします。
h q、h R または h o を使用して、追加情報を取得します。
>> p $pattern
perl
>> q
注意 :Perl に比較的慣れていない場合は、以前の記事「初心者向けの 20 の perl プログラミングのヒント」を参照してください。
Perl デバッガ コマンドの概要
perl デバッガーに入ると、次のオプションを使用できます。
- h または h h – ヘルプ ページ
- c – 現在の実行からブレークポイントまで、またはサブルーチン名または行番号まで続行します。
- p – 変数の値を表示する
- b – ブレークポイントを配置する
- L – 設定されたブレークポイントを確認する
- d – ブレークポイントを削除する
- s – 次の行の実行に進みます。
- n – 次の行の実行をステップ オーバーするため、次の行がサブルーチン呼び出しである場合、サブルーチンを実行しますが、検査のためにサブルーチンに降りることはありません。
- ソース ファイル – ファイルからデバッグ コマンドを取得します。
- l subname – サブルーチンで使用可能な実行ステートメントを表示します。
- q – デバッガー モードを終了します。