マスタリングPerl (4章 Perlのデバッギング)
勉強メモ。
- printまたは、carp(warn)で変数を出力
変数をブレース[ ]で囲むと、先頭または末尾の空白が表示されるので、分かりやすい。
- プログラムのトレース
Carpモジュールのcluckまたは、confessでスタックトレース(サブルーチンの呼び出しと引数リスト)を出力させることができる。
cluckはスタックトレースを出力するがプログラムも継続させるwarn的な動作、confessはスタックトレース出力をするとプログラムを終了させるdie的な動作となる。
-
- 例*1
#!/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"; } ÷(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
ActiveStateの統合開発環境。
Late Night Softwareが開発したPerl専用デバッガ。
*1:サブルーチンを1つしか呼び出していないので、いまいちな例だが、サブルーチンからサブルーチンを呼び出すような処理の時は、引数が分かるので便利。