ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

UbuntuにEclipseをインストール、Perlをデバッグ

結局、仕事はWin機で行い、PerlJavaを同じくらいの比率で書くことになりそうなので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


次に、EclipseCatalystのプロジェクトを作って、これをデバッグ出来るようにしたい。
デバッグ実行のやり方は下記が参考になった。
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ビュー:
f:id:ikeike443:20100207024207p:image
レキシカル変数の中身もばっちりデバッグできているようだ。


さて、ここまでは出来た。

分からないのはCatalystの挙動で、本当は自分のアプリのController/Root.pmをデバッグしたいのだが、Root.pmにブレークポイントをおいてもなぜか止まってくれない。
parent.pmのPerldocを読むと、

parent - Establish an ISA relationship with base classes at compile time

とあるのだが、これが関係ある? っていうかPerlでcompileってなに?

分からないことだらけだ。。

またあらためて調査することにする。