マスタリングPerl (4章 Perlのデバッギング)

勉強メモ。

  • printまたは、carp(warn)で変数を出力

変数をブレース[ ]で囲むと、先頭または末尾の空白が表示されるので、分かりやすい。

  • プログラムのトレース

Carpモジュールのcluckまたは、confessでスタックトレース(サブルーチンの呼び出しと引数リスト)を出力させることができる。
cluckはスタックトレースを出力するがプログラムも継続させるwarn的な動作、confessはスタックトレース出力をするとプログラムを終了させるdie的な動作となる。

#!/usr/bin/perl

use strict;
use warnings;
use Carp qw/cluck/;

sub divide {
    print "-" x 73, "\n";
    cluck();
    print "-" x 73, "\n";
    my ($n, $m) = @_;
    my $divide = $n / $m;
    print "Result: $divide\n";
}

&divide(10,2);

__END__
$ ./cluck.pl 
-------------------------------------------------------------------------
 at ./cluck.pl line 9
	main::divide(10, 2) called at ./cluck.pl line 16
-------------------------------------------------------------------------
Result: 5
  • Hook::LexWarp

サブルーチンの呼び出し直前と直後に処理を行うことができる。
サブルーチンそのもののコードは変更しなくてよい。

#!/usr/bin/perl

use strict;
use warnings;
use Hook::LexWarp qw/warp/;

warp add,
  pre => sub { print "Arguments: [@_]\n" },       #サブルーチン直前に実行したい処理
  post => sub { print "return value: $_[-1]\n" }  #サブルーチン直後に実行したい処理
  ;

sub add {
  .....
}

__END__
  • perl5db.pl

Perl標準デバッガ。
-dスイッチで呼び出す。

  • Devel::ptkdb

GUIを提供するTkベースのデバッガ。
perl5db.plと同機能。

  • Devel::ebug

Perlのデバッガ機能にオブジェクト指向インタフェースを提供する。
Devel::ebug::HTTPで、ブラウザでデバッグできる。

  • その他、デバッガ(開発環境)
    • EPIC

EclipsePerlプラグイン

ActiveStateの統合開発環境

Late Night Softwareが開発したPerl専用デバッガ。

*1:サブルーチンを1つしか呼び出していないので、いまいちな例だが、サブルーチンからサブルーチンを呼び出すような処理の時は、引数が分かるので便利。