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 をダンプするとスタックトレースやエラーの内容ももれなくついてきますが、ひどいときには数千行や数万行になるので、的をしぼって出力することをおすすめします。