Perlでスタックトレース
Java で開発していたときは、エラー発生時に e.printStackTrace() や new Throwable().printStackTrace() でスタックトレースを出力していました。これがないと目隠しでデバッグするようなもので、開発段階では必須でした。Perl でも Devel::StackTrace というモジュールを使うとスタックトレースがとれます。これをラップしたのが Catalyst::Plugin::StackTrace です。以下のようにして使います。
MyApp/lib/MyApp.pm
package MyApp; use Catalyst qw/-Debug Dumper StackTrace/; use Data::Dumper; sub end : Private { my ( $self, $c ) = @_; # some fatal error occured if (scalar @{$c->error}) { #$c->log->debug('verbose $c: ', Dumper($c)); # very large size !!!!! $c->log->fatal('verbose $c->_stacktrace: ', Dumper($c->_stacktrace)); $c->log->fatal('verbose $c->error: ', Dumper($c->error)); $c->{error} = []; }
$c をダンプするとスタックトレースやエラーの内容ももれなくついてきますが、ひどいときには数千行や数万行になるので、的をしぼって出力することをおすすめします。