Perlで実行した行を出力するDevel::Trace

Perlで実行した行を出力するDevel::Trace

Posted at September 10,2014 12:03 AM
Tag:[Perl]

Perlで実行した行を出力するDevel::Traceの使い方です。

1.はじめに

PerlではDevel::Traceを利用することで、実行した行を標準出力に出力することができます。

また、Devel::Trace::Moreを利用することでファイルに出力することもできます。

各モジュールはcpanmなどでインストールしてください。

ここではWindowsでの動作結果を用いていますが、Linuxでも同じと思います。

2.実行した行を標準出力する

実行した行を標準出力するには、shebang行に-「-d:Trace」を追加します。

test.pl

#!/usr/bin/perl -d:Trace
use strict;
 
my $a = 10;
my $b;
for ( my $i=0; $i<10; $i++ ) {
    $b++;
}

実行すれば次のように出力されます。

C:\>test.pl
>> C:\test.pl:5: my $a = 10;
>> C:\test.pl:6: my $b;
>> C:\test.pl:8: for ( my $i=0; $i<10; $i++ ) {
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;
>> C:\test.pl:9:     $b++;

shebang行ではなく、perlのオプションに「-d:Trace」を付与しても同じ結果になるようですが、こちらの環境での実験では確認できておりません。

C:\>test.pl -d:Trace

3.ファイルに出力する

2項を、

c:\>test.pl > /tmp/result.txt

とリダイレクトしても、結果がファイルに出力されない場合があるようです。

ということで、ファイルに出力するにはDevel::Trace::Moreを利用してみます。

#!/usr/bin/perl -d:Trace::More
use strict;
 
Devel::Trace::More::output_to('/tmp/result.txt');
my $a = 10;
my $b;
for ( my $i=0; $i<10; $i++ ) {
    $b++;
}

これを実行すれば2項と同じ実行結果がファイルに出力されます。

output_to()は出力が開始する一番先頭に付与する必要があるようです。

4.インデントが分るかようにする

下記の記事の改変を行えば、出力結果にネストをつけることもできます。

コールトレースを追うデバッグ用モジュール

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)