UbuntuにEclipseをインストール、Perlをデバッグ
結局、仕事はWin機で行い、PerlとJavaを同じくらいの比率で書くことになりそうなのでEclipseで開発することにした.
ということで会社のWin機にはEclipseとEpicを入れたのだが、自宅のUbuntuにEpicを入れようとするとエラーになってしまった。
どうやら、UbuntuでaptあるいはSynapticでEclipseを入れても、eclipse-platformしかインストールされないらしい。
なので必要そうなモジュールを手動で入れてやればよい。
$ sudo apt-get eclipse-pde
この件は下記が参考になった。
http://blog.goo.ne.jp/saitosatoru/e/fb31da1cb25a90f198eb7308b8e37511
次に、EclipseにCatalystのプロジェクトを作って、これをデバッグ出来るようにしたい。
デバッグ実行のやり方は下記が参考になった。
http://old.nabble.com/Eclipse-and-Catalyst-td23019067.html
だが、これだけだと、デバッグ実行時にレキシカル変数の中身を展開することが出来ない。
これを解決するにはCPANでPadWalkerを入れればよい。
EclipseのデバッグパースペクティブのValiablesビューにPadWakerを入れろというエラーメッセージが出るから分かると思う。
$ sudo cpan CPAN: File::HomeDir loaded ok (v0.86) cpan shell -- CPAN exploration and modules installation (v1.9205) ReadLine support available (maybe install Bundle::CPAN or Bundle::CPANxxl?) cpan[1]> make install PadWalker
さて、Perl界隈で有名なWAFであるCatalystの5.8系は、クラスの継承に"use parent"プラグマを使っているので、試しにparent.pmをデバッグしてみた。
parent.pmのソース:
package parent; use strict; use vars qw($VERSION); $VERSION = '0.221'; sub import { my $class = shift; my $inheritor = caller(0); if ( @_ and $_[0] eq '-norequire' ) { shift @_; } else { for ( my @filename = @_ ) { if ( $_ eq $inheritor ) { warn "Class '$inheritor' tried to inherit from itself\n"; }; s{::|'}{/}g; require "$_.pm"; # dies if the file is not found } } { no strict 'refs'; # This is more efficient than push for the new MRO # at least until the new MRO is fixed @{"$inheritor\::ISA"} = (@{"$inheritor\::ISA"} , @_); }; };
Eclipseデバッグ実行時のValiablesビュー:
レキシカル変数の中身もばっちりデバッグできているようだ。
さて、ここまでは出来た。
分からないのはCatalystの挙動で、本当は自分のアプリのController/Root.pmをデバッグしたいのだが、Root.pmにブレークポイントをおいてもなぜか止まってくれない。
parent.pmのPerldocを読むと、
parent - Establish an ISA relationship with base classes at compile time
とあるのだが、これが関係ある? っていうかPerlでcompileってなに?
分からないことだらけだ。。
またあらためて調査することにする。