どの行が実行されているかを見る(実行トレース)
Net::MSN - metacpan.orgを使ってごにょごにょしようとしたら、途中でSegmentation faultを起こしてログインすらできなかった。perl自体が落ちてしまうし、perl -dも固まってしまう始末。
そこでとりあえずどのモジュールが悪いのか調べたく、トレースを見ることにした。"trace"でCPANを検索。色々試した結果、Devel::Trace - Print out each line before it is executed (like sh -x) - metacpan.orgがBest Practiceのよう。
早速デバッグ。
$ cpan Devel::Trace $ perl -d:Trace MSN.pl (略) >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/MainContext.pm:8: require Crypt::SSLeay::CTX; >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/CTX.pm:2: require Crypt::SSLeay; >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/CTX.pm:3: 1; >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/MainContext.pm:17: my $ctx = &main_ctx(); >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/MainContext.pm:20: my $ssl_version = shift || 23; >> /usr/lib/perl5/site_perl/5.8/cygwin/Crypt/SSLeay/MainContext.pm:22: my $ctx = Crypt::SSLeay::CTX->new($ssl_version); Segmentation fault (core dumped)
というわけで、Crypt::SSLeayがダメな模様。
確認。
$ perl -MCrypt::SSLeay -e 'my $ctx = Crypt::SSLeay::CTX->new(23);' Segmentation fault (core dumped)
さて、これで悪いところは分かったのでデバッグの続きができそうだ。
Devel::Traceいいよいいよー